Có ai biết nếu Python có chức năng tích hợp sẵn để làm việc để in ra ngay cả các giá trị. Ví dụ như phạm vi().Ngay cả các số trong Python
Cảm ơn
Có ai biết nếu Python có chức năng tích hợp sẵn để làm việc để in ra ngay cả các giá trị. Ví dụ như phạm vi().Ngay cả các số trong Python
Cảm ơn
Bạn có thể viết range(0, 10, 2)
.
Chỉ cần sử dụng một bước 2:
range(start, end, step)
Hãy thử:
range(0, 10, 2)
>>> if 100 % 2 == 0 : print "even"
...
even
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.
Bạn cũng có thể viết 'bản đồ (lambda x: x * 2, phạm vi (0, 50))' – SLaks
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] –
#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)
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)
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
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 itertools
và more_itertools
1 để 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
.
itertools.count
mang lại giá trị tiếp theo tăng thêm step=2
(xem equivalent code).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).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ư take
và tabulate
.
Cũng như xrange() – Will
+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? –