Tôi thích các giải pháp đơn giản nhất có thể (bao gồm cả hiệu quả). Nó không phải là luôn luôn rõ ràng cho dù các giải pháp là như vậy. Dù sao, các range()
trong Python 3 là một máy phát điện. Bạn có thể bọc nó vào bất kỳ cấu trúc nào lặp lại. Các list()
có khả năng xây dựng một giá trị danh sách từ bất kỳ iterable. Toán tử +
cho danh sách nối. Tôi đang sử dụng các giá trị nhỏ hơn trong ví dụ:
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(10, 20))
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> list(range(5)) + list(range(10,20))
[0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Đây là những gì range(5) + range(10, 20)
chính xác đã làm trong Python 2.5 - bởi vì range()
trả một danh sách.
Trong Python 3, nó chỉ hữu ích nếu bạn thực sự muốn xây dựng danh sách. Nếu không, tôi khuyên bạn nên sử dụng giải pháp Lev Levitsky's với itertools.chain.Tài liệu cũng cho thấy việc triển khai rất đơn giản:
def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element
Giải pháp bởi Inbar Rose là tốt và tương đương với chức năng. Dù sao, +1 của tôi đi đến Lev Levitsky và lập luận của ông về việc sử dụng các thư viện chuẩn. Từ Thiền của Python ...
Khi đối mặt với sự mơ hồ, từ chối sự cám dỗ để đoán.
#!python3
import timeit
number = 10000
t = timeit.timeit('''\
for i in itertools.chain(range(30), range(2000, 5002)):
pass
''',
'import itertools', number=number)
print('itertools:', t/number * 1000000, 'microsec/one execution')
t = timeit.timeit('''\
for x in (i for j in (range(30), range(2000, 5002)) for i in j):
pass
''', number=number)
print('generator expression:', t/number * 1000000, 'microsec/one execution')
Theo tôi, các itertools.chain
là dễ đọc hơn. Nhưng điều thực sự quan trọng ...
itertools: 264.4522138986938 microsec/one execution
generator expression: 785.3081048010291 microsec/one execution
... nhanh hơn khoảng 3 lần.
Phiên bản python? –
phiên bản python của tôi là phiên bản 3.3.0 .. tôi cũng đã cập nhật trong câu hỏi của tôi – MAG
Bạn muốn nhận được kết quả gì (như trong, loại dữ liệu nào - danh sách đơn giản, trình tạo, cái gì khác)? Bạn muốn làm gì với kết quả? –