Tôi muốn biết liệu chuỗi được tạo có ít hơn 2 mục nhập hay không.Làm thế nào để biết một chuỗi được tạo ra có chiều dài nhất định là
>>> def sequence():
... for i in xrange(secret):
... yield i
phương pháp kém hiệu quả của tôi là tạo ra một danh sách, và đo chiều dài của nó:
>>> secret = 5
>>> len(list(sequence())) < 2
True
Rõ ràng, điều này tiêu thụ toàn bộ máy phát điện.
Trong trường hợp thực sự của tôi, trình tạo có thể đang đi qua một mạng lớn. Tôi muốn làm kiểm tra mà không cần tiêu thụ toàn bộ máy phát điện, hoặc xây dựng một danh sách lớn.
Có một recipe in the itertools documentation:
def take(n, iterable):
"Return first n items of the iterable as a list"
return list(islice(iterable, n))
này chỉ xây dựng một danh sách dài tối đa n
, mà là tốt hơn.
Vì vậy, tôi có thể nói:
>>> len(take(2, sequence()) < 2
Có một cách thậm chí pythonic hiệu quả hơn để làm điều đó?
Đây là một câu hỏi lớn Peter Gỗ - cách tiếp cận ngây thơ của tôi sẽ được tạo ra một dự kiến hai và lưu trữ chúng, nhưng phải có cách tốt hơn. Tôi tò mò về nó. Tôi nghi ngờ một máy phát điện có thể biết kích thước của nó trước khi được tiêu thụ. –
Silghtly không liên quan nhưng như quy tắc chung hãy cẩn thận với 'danh sách (iterator)', vòng lặp có thể là vô hạn ... –
Chắc chắn câu hỏi quan trọng là - làm thế nào bạn sẽ biết, * mà không * tiêu thụ iterator, nếu nó sẽ là đủ dài (hoặc đủ ngắn? Tiêu đề của bạn dường như xung đột với câu hỏi)? Bạn có bất kỳ thông tin nào khác có thể cho phép bạn xác định điều này không? – jonrsharpe