Cách thêm dãy số trong python

Lặp đi lặp lại nối vào một Sê-ri có thể tốn nhiều công sức tính toán hơn so với nối một lần. Một giải pháp tốt hơn là nối thêm các giá trị vào danh sách và sau đó nối danh sách với Sê-ri ban đầu cùng một lúc

ai đó có thể giúp tôi không? . [4,3,8,6,16,12,…. ,192]
series of numbers:[4,3,8,6,16,12,….,192]

Nếu không có giải thích về mối quan hệ giữa những con số này
điều tốt nhất bạn có thể làm là lập trình tự đó. Thông thường, bạn sẽ không bận tâm
nếu bạn đã có một danh sách rõ ràng. Hmm, có vẻ như là một dãy

def f[......]:
    .. do some work ...
    return final_value
5,
def f[......]:
    .. do some work ...
    return final_value
6 cho
def f[......]:
    .. do some work ...
    return final_value
7 đếm từ 1. Chỉ cần đoán.

Chỉ từ cách diễn đạt [mặc dù sẽ tốt hơn nếu xem
bài kiểm tra câu hỏi chính xác, vì đây giống như bài tập về nhà], bạn được yêu cầu
make a “generator” function. This is a special kind of Python function
đặc biệt trả về các giá trị [tốt, "yield"s] dần dần, nghĩa là nó có thể
tạo ra các giá trị ban đầu trước khi hoàn thành .

Bạn biết rằng vòng lặp for có thể lặp qua bất kỳ lần lặp nào không?

for i in range[10]:

đặt

def f[......]:
    .. do some work ...
    return final_value
0 liên tiếp thành 0, 1, 2, đến 9, là các giá trị
từ
def f[......]:
    .. do some work ...
    return final_value
1.
def f[......]:
    .. do some work ...
    return final_value
2 là một hàm tạo. Một chức năng bình thường
đi.

def f[......]:
    .. do some work ...
    return final_value

để nó chạy đến khi hoàn thành, sau đó trả về kết quả

Một hàm tạo trông như thế này

def f[......]:
    .. do some work, yielding values on the way ...

ví dụ: phiên bản đơn giản của

def f[......]:
    .. do some work ...
    return final_value
2

def my_range[n]:
    i = 0
    while i < n:
        yield i
        i += 1

Bạn có muốn gọi chức năng này không, nó sẽ trả về ngay lập tức và bạn được trao một
“trình tạo”, là một hàm có thể lặp lại. Như thế này, tại dấu nhắc tương tác.

________số 8

Trình tạo

def f[......]:
    .. do some work ...
    return final_value
4 có thể lặp lại, vì vậy bạn có thể sử dụng nó trong vòng lặp for

def f[......]:
    .. do some work ...
    return final_value
0

mặc dù tất nhiên bạn thường làm điều này trực tiếp

def f[......]:
    .. do some work ...
    return final_value
1

Bản thân hàm này không chạy cho đến khi bạn thử lặp lại nó. Sau đó,
nó chạy cho đến khi gặp câu lệnh

def f[......]:
    .. do some work ...
    return final_value
5 và phép lặp của bạn nhận được
giá trị được truyền cho
def f[......]:
    .. do some work ...
    return final_value
5. Tại thời điểm đó, hàm bị tạm dừng, bạn
thực hiện mọi việc với giá trị và sau đó, lần sau khi bạn lặp lại hàm
sẽ tiếp tục.

Vì vậy, có thể bạn đang được yêu cầu viết một hàm tạo để mang lại
các giá trị từ chuỗi mà bạn mô tả. Hãy thử viết một hàm như vậy
và trả về mã và/hoặc câu hỏi.

Tôi sẽ bắt đầu bằng cách viết một hàm chỉ cần

def f[......]:
    .. do some work ...
    return final_value
7 các giá trị
từ chuỗi. Làm cho công việc đó. Sau đó, thay thế các câu lệnh
def f[......]:
    .. do some work ...
    return final_value
7 bằng
def f[......]:
    .. do some work ...
    return final_value
5 và thử sử dụng hàm trong một vòng lặp, với phần thân của vòng lặp
in ra các giá trị. [Thực ra, hãy giữ các
def f[......]:
    .. do some work ...
    return final_value
7, chúng sẽ cho phép
bạn thấy quá trình thực thi chức năng của mình xen kẽ với vòng lặp.

Chúc mừng!
Cameron Simpson cs@cskk. Tôi. au

Trong chương trình này, chúng tôi yêu cầu người dùng nhập hai số và chương trình này hiển thị tổng của hai số do người dùng nhập

Chúng tôi sử dụng chức năng tích hợp sẵn

def f[......]:
    .. do some work ...
    return final_value
8 để lấy đầu vào. Vì,
def f[......]:
    .. do some work ...
    return final_value
8 trả về một chuỗi, chúng tôi chuyển đổi chuỗi thành số bằng cách sử dụng hàm
def f[......]:
    .. do some work ...
    return final_value
0. Sau đó, các số được thêm vào

Ngoài ra, chúng ta có thể thực hiện phép cộng này trong một câu lệnh mà không cần sử dụng bất kỳ biến nào như sau

Trong suốt thời gian học đại học, tôi thường nghe thấy cụm từ “có một số cách để lột da một con mèo” được các giảng viên lặp đi lặp lại trong các lớp toán, toán ứng dụng và vật lý. Thật tồi tệ và bạo lực khi tôi tìm thấy cụm từ này của Mark Twain, nó gắn bó với tôi [đủ kỳ lạ] như một lời nhắc nhở nhẹ nhàng rằng luôn có vô số con đường khả thi mà một người có thể thực hiện để đạt được mục tiêu. Điều này giúp tôi khá nhiều khi quyết định sử dụng phương pháp nào trong mã hóa

Trong những ngày đầu của tôi, tất cả những gì tôi biết là phạm vi [] như một phương pháp để tạo các chuỗi tăng [hoặc giảm] đơn điệu trong Python. Sau đó, tôi được giới thiệu về xrange[] và numpy. arange[] mà sau đó khiến tôi phải sử dụng hmmm, với tư cách là một người mới, chiến lược để quyết định sử dụng chức năng nào là gì?

1. Phương pháp tích hợp. phạm vi[]

Phạm vi phương thức tích hợp [[bắt đầu,] dừng, [bước]] là phần giới thiệu đầu tiên của tôi về cách tạo chuỗi trong Python. Các đối số tùy chọn trong hàm được hiển thị trong ngoặc vuông. Phương thức range[] tạo ra một đối tượng bất biến là một dãy số. Đối tượng phạm vi [] có thể dễ dàng được chuyển đổi thành danh sách Python bằng cách đặt nó trong phương thức danh sách, ví dụ: tạo danh sách các giá trị từ 10 [bắt đầu] đến 0 [dừng] giảm dần theo gia số 2 [bước]

def f[......]:
    .. do some work ...
    return final_value
8

Phương pháp này đã được chứng minh là rất hữu ích trong các vòng lặp for và khả năng hiểu danh sách giống nhau vì nó được tích hợp sẵn và hiệu quả. Để đo tốc độ của nó, tôi đã viết tập lệnh rất đơn giản này, cung cấp một lượng lớn thời gian chạy mẫu để thực thi phạm vi [10]. Một phân phối thời gian chạy lớn [rt] cung cấp thước đo hợp lý về tốc độ trung bình mà một đối tượng range[] được tạo ra

def f[......]:
    .. do some work ...
    return final_value
9

Tập lệnh ngắn gọn này cung cấp thời gian chạy trung bình và độ không đảm bảo 1σ [hoặc độ lệch chuẩn] tính bằng nano giây. Người ta có thể sử dụng phương pháp ma thuật% timeit để có được một biện pháp tương tự. Chạy tập lệnh này cho chúng ta

def f[......]:
    .. do some work ...
    return final_value
0

Có vẻ đủ nhanh nhưng có những lựa chọn thay thế nhanh hơn không?

2. Phương thức tích hợp Python 2. xphạm vi[]

Một phương thức tích hợp khác mà bạn có thể đã phát hiện ra trước khi chuyển sang Python 3 là xrange[[start, ]stop, [step]]. Nó xuất ra một đối tượng trình tạo. Giống như phạm vi [], nó rất hữu ích trong các vòng lặp và cũng có thể được chuyển đổi thành một đối tượng danh sách. Sử dụng một thử nghiệm tương tự như trước đây, chúng ta có thể đo thời gian chạy trung bình của nó và thu được kết quả

def f[......]:
    .. do some work ...
    return final_value
1

Với biên độ lỗi, tốc độ thực thi của phạm vi [] và xrange [] khá giống nhau. Sự khác biệt chính là ở đầu ra - một lần lặp được cung cấp bởi phạm vi [] và đầu ra đối tượng trình tạo bởi xrange[]. So sánh việc sử dụng bộ nhớ giữa hai đối tượng mang lại,

def f[......]:
    .. do some work ...
    return final_value
2

Mặc dù không có sự khác biệt về hiệu quả, đối tượng xrange[] nhỏ hơn đáng kể về kích thước byte. Một trình tạo trình tự khác mà chúng ta có thể xem xét là trình tạo trình tự tồn tại trong thư viện NumPy

3. Phương pháp NumPy. cục mịch. sắp xếp[]

Phương pháp numpy. arange[[start, ]stop, [step, ]dtype=None] từ NumPy cung cấp chức năng tạo chuỗi. Nó tạo ra một đối tượng mảng NumPy [hoặc numpy. ndarray]. Chạy tập lệnh tương tự để xác định sản lượng thời gian chạy trung bình,

def f[......]:
    .. do some work ...
    return final_value
3

Dựa trên thử nghiệm này, numpy. arange[] thực thi trung bình gấp đôi thời gian chạy mà range[] và xrange[] thực hiện

Với xrange[] bị giới hạn ở Python 2 và numpy. arange[] là hệ số tạo chuỗi chậm hơn hai lần so với cả xrange[] và range[], câu trả lời có vẻ khá rõ ràng. Phương thức range[] là cách hiệu quả nhất để tạo chuỗi tăng hoặc giảm đơn điệu trong Python. Mặc dù điều này có thể đúng, nhưng các đối tượng được tạo bởi mỗi phương thức sử dụng bộ nhớ khác nhau

Hãy cẩn thận - đầu ra của từng phương pháp

Thật vậy, phạm vi [] thực thi nhanh hơn numpy. arange[] và xuất ra một đối tượng có thể được chuyển đổi thành danh sách có thể lặp lại. Mặt khác, numpy. arange[] cung cấp cho bạn một numpy. ndarray. Không còn nghi ngờ gì nữa, phạm vi [] là một lựa chọn tốt hơn trong các vòng lặp for. Tuy nhiên, khi nói đến hoạt động trên chuỗi kết quả, mảng NumPy có lợi thế rõ ràng về cả mức tiêu thụ bộ nhớ và tốc độ

Bắt đầu với bộ nhớ, chúng ta có thể tìm hiểu lượng bộ nhớ được sử dụng bởi một đối tượng danh sách Python so với mảng NumPy

def f[......]:
    .. do some work ...
    return final_value
4

Các mảng NumPy chỉ chiếm ít dung lượng hơn trong kho lưu trữ bộ nhớ của trình biên dịch khiến chúng hoạt động hiệu quả hơn. Đây là thứ mà người ta có thể kiểm tra dễ dàng so sánh tốc độ thực hiện các phép tính số học cơ bản trên danh sách và numpy. ndarrays như đã được chứng minh trong bài viết khóa học web UCF này

Nói chung, khám phá nhiều cách để lột da một con mèo, có thể nói, trong hành trình Python của một người có thể cung cấp cái nhìn sâu sắc để hiểu tầm quan trọng của tốc độ, chức năng và việc sử dụng bộ nhớ của các loại dữ liệu và phương thức khác nhau. Quan trọng nhất, việc viết các bài kiểm tra ngắn để so sánh thời gian chạy có thể giúp người ta nhận ra phương pháp nào sẽ tăng cả độ sạch và hiệu quả của mã

Chủ Đề