2010-02-02 27 views

Trả lời

48

Range has three parameters.

Bạn có thể viết range(0, 10, 2).

+4

Cũng như xrange() – Will

+7

+1 cho liên kết thực tế với tài liệu ... tại sao có quá ít người bận tâm? –

8

Chỉ cần sử dụng một bước 2:

range(start, end, step) 
5

Hãy thử:

range(0, 10, 2) 
0
>>> if 100 % 2 == 0 : print "even" 
... 
even 
6

Tôi không biết nếu điều này là những gì bạn muốn nghe, nhưng nó khá tầm thường để lọc ra các giá trị kỳ lạ với danh sách hiểu.

evens = [x for x in range(100) if x%2 == 0] 

hoặc

evens = [x for x in range(100) if x&1 == 0] 

Bạn cũng có thể sử dụng tham số kích thước bước không bắt buộc cho range để đếm lên bởi 2.

+0

Bạn cũng có thể viết 'bản đồ (lambda x: x * 2, phạm vi (0, 50))' – SLaks

+0

Bổ sung lần cuối để nhận tỷ lệ cược: odds = [x cho x trong phạm vi (100) nếu x & 1! = 0] –

0
#This is not suggestible way to code in Python, but it gives a better understanding 


numbers = range(1,10) 

even = [] 

for i in numbers: 

    if i%2 == 0: 

     even.append(i) 
print (even) 
-1
a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 

b = [i for i in a if i % 2 == 0] 

print("Original List -->", a,"\n") 
print("and the Even Numbers-->", b) 
+0

Cảm ơn sự đóng góp của bạn. Lưu ý rằng đây là một câu hỏi rất cũ đã chứa nhiều câu trả lời hay. Đặc biệt, [câu trả lời của Sapph] (https://stackoverflow.com/a/2184774/2124834) đã chứa kỹ thuật bạn mô tả. – Marein

0

Ngoài ra còn có một số cách để viết một vòng lặp vô hạn, lười biếng của các số chẵn.

Chúng tôi sẽ sử dụng các mô-đun itertoolsmore_itertools1 để làm cho vòng lặp mà bắt chước range().

import itertools as it 

import more_itertools as mit 


# Infinite iterators 
a = it.count(0, 2) 
b = mit.tabulate(lambda x: 2 * x, 0) 
c = mit.iterate(lambda x: x + 2, 0) 

Tất cả các tùy chọn sau có thể tạo chuỗi số chẵn vô hạn, 0, 2, 4, 6, ....

Bạn có thể đối xử với những giống như bất kỳ máy phát điện bằng cách lặp qua chúng, hoặc bạn có thể chọn n số từ chuỗi qua itertools.islice hoặc take từ itertools recipes ví dụ .:

mit.take(10, a) 
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 

này tương đương với list(range(0, 20, 2)). Tuy nhiên, không giống như range(), các iterator bị tạm dừng và sẽ mang lại hàng loạt tiếp theo của số chẵn nếu chạy lại:

mit.take(10, a) 
# [20, 22, 24, 26, 28, 30, 32, 34, 36, 38] 

Chi tiết

Các tùy chọn trình bày được tất cả các vòng lặp vô hạn mà start với một số nguyên, tức là 0.

  • a. itertools.count mang lại giá trị tiếp theo tăng thêm step=2 (xem equivalent code).
  • b. more_itertools.tabulate là một itertools recipe ánh xạ một hàm cho mỗi giá trị của một dòng số (xem source code).
  • c. more_itertools.iterate mang lại giá trị bắt đầu (0). Sau đó, nó áp dụng một chức năng cho mục cuối cùng (tăng thêm 2), mang lại kết quả và lặp lại quá trình này (xem source code).

1 Một gói của bên thứ ba mà thực hiện nhiều công cụ hữu ích, bao gồm itertools recipes như taketabulate.

Các vấn đề liên quan