Cách in một dãy số trong Python

Trong lập trình, Vòng lặp được sử dụng để lặp lại một khối mã cho đến khi đáp ứng một điều kiện cụ thể. Vòng lặp for là một cấu trúc kiểm soát việc lặp lại cho phép bạn viết một vòng lặp cần thực hiện một số lần cụ thể một cách hiệu quả

Ngoài ra, chúng tôi sẽ sử dụng một trong các chức năng tích hợp sẵn của Python range[]. Chức năng này được sử dụng rộng rãi trong các vòng lặp để kiểm soát số lần vòng lặp phải chạy. Nói một cách đơn giản, phạm vi được sử dụng để tạo một chuỗi giữa các giá trị đã cho

Để hiểu rõ hơn về các Python này, các khái niệm nên đọc các bài viết sau

for i in range[1, 11]:
    print[i]

đầu ra

1
2
3
4
5
6
7
8
9
10

Giải trình

Vòng lặp for in số từ 1 đến 10 bằng cách sử dụng hàm range[] ở đây i là một biến tạm thời lặp qua các số từ 1 đến 10

Điều đáng nói là tương tự như lập chỉ mục danh sách trong phạm vi bắt đầu từ 0, có nghĩa là range[ j ]sẽ in chuỗi cho đến [ j-1] do đó đầu ra không bao gồm 6

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 [thật 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]

>>list[range[10,0,-2]]
[10, 8, 6, 4, 2]

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

rt=[]for _ in range[1000000]:
t1 =time.time[]
seq = range[val]
rt.append[time.time[]-t1]
rt_mean = np.mean[rt]*1.e9
rt_std = np.std[rt]*1.e9
print[u'range[] has an average runtime of %.0f \u00B1 %.0f ns'%[rt_mean,rt_std]]

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

range[] has an average runtime of 478 ± 739 ns

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ả

xrange[] has an average runtime of 370 ± 682 ns

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,

>> print['Memory use of iterable: %d'%[sys.getsizeof[range_seq]] ]
Memory use of iterable: 152
>> print['Memory use of generator object: %d'%[sys.getsizeof[xrange_seq]] ]
Memory use of generator object: 40

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,

numpy.arange[] has an average runtime of 1111 ± 958 ns

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

________số 8_______

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, việc 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 pháp 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ủ Đề