Câu hỏi liên quan

0 Phiếu
2 Câu trả lời
0 Phiếu
0 Câu trả lời
+1 Phiếu
0 Câu trả lời
0 Phiếu
0 Câu trả lời
0 Phiếu
0 Câu trả lời

Hiện range() thực sự tạo ra các danh sách?


0 Phiếu
Đã hỏi 23/5/2016 bởi a_stike (550 điểm)
Cả hai của tôi giáo sư và này chàng tuyên bố rằng range() tạo ra một danh sách các giá trị.
"lưu ý: phạm vi function chỉ đơn giản là trả về một danh sách chứa các con số từ x đến y-1. Ví dụ, phạm vi (5, 10) trả về danh sách [5, 6, 7, 8, 9]."
tôi tin rằng điều này là không chính xác đến vì:
type(range(5, 10))
<class 'range'>
Furthermore, rõ ràng chỉ cách để access các nguyên tạo ra bởi range() là để iterate qua chúng, dẫn tôi để tin rằng ghi nhãn range() như là một danh sách không chính xác.

3 Câu trả lời

0 Phiếu
Đã trả lời 03/6/2016 bởi coiaNot (620 điểm)
 
Câu trả lời hay nhất
Trong Python 2.x, range trả về một danh sách, nhưng trong Python 3.x range trả về một chuỗi immutable , type range . Python 2.x:
print type(range(10))
# <type 'list'>
print type(xrange(10))
# <type 'xrange'>
Python 3.x:
print(type(range(10)))
# <class 'range'>
trong Python 2.x, nếu bạn muốn nhận một đối tượng iterable, giống như Python 3.x, bạn có thể sử dụng chức năng xrange, mà trả về một chuỗi immutable type xrange . Lợi thế của xrange hơn range trong Python 2.x:
lợi thế của xrange() hơn range() là tối thiểu (kể từ khi xrange() vẫn còn có để tạo ra các giá trị khi được hỏi cho họ) trừ khi một phạm vi rất lớn được sử dụng trên một máy tính bộ nhớ-đói hoặc khi tất cả các yếu tố của phạm vi không bao giờ được sử dụng (chẳng hạn như khi loop thường chấm dứt với break).
lưu ý:
Furthermore, cách chỉ rõ ràng để access số nguyên tạo ra bởi range() là để iterate qua chúng,
không. Kể từ khi range các đối tượng trong Python 3 immutable chuỗi, họ hỗ trợ lập chỉ mục như là tốt. Trích dẫn từ tài liệu hướng dẫn function range,
phạm vi thực hiện tất cả các hoạt động trình tự thông thường ngoại trừ concatenation và lặp lại... Phạm vi đối tượng thực hiện collections.abc.Sequence ABC, và cung cấp các tính năng như ngăn chặn các xét nghiệm, element chỉ số tra cứu , slicing và hỗ trợ cho chỉ số tiêu cực.
ví dụ,
print(range(10, 20)[5])
# 15
print(range(10, 20)[2:5])
# range(12, 15)
print(list(range(10, 20)[2:5]))
# [12, 13, 14]
print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]
print(18 in range(10, 20))
# True
print(100 in range(10, 20))
# False
tất cả những có thể với chuỗi đó range immutable .
Đã bình luận 03/6/2016 bởi guv_50 (110 điểm)
Câu cuối cùng của bạn là không chính xác. 'phạm vi' đối tượng thực hiện '__getitem__'.
0 Phiếu
Đã trả lời 03/6/2016 bởi qbp_2984 (200 điểm)
Trong Python 2.x, range trả về một danh sách, nhưng trong Python 3.x range trả về một chuỗi immutable , type range . Python 2.x:
print type(range(10))
# <type 'list'>
print type(xrange(10))
# <type 'xrange'>
Python 3.x:
print(type(range(10)))
# <class 'range'>
trong Python 2.x, nếu bạn muốn nhận một đối tượng iterable, giống như Python 3.x, bạn có thể sử dụng chức năng xrange, mà trả về một chuỗi immutable type xrange . Lợi thế của xrange hơn range trong Python 2.x:
lợi thế của xrange() hơn range() là tối thiểu (kể từ khi xrange() vẫn còn có để tạo ra các giá trị khi được hỏi cho họ) trừ khi một phạm vi rất lớn được sử dụng trên một máy tính bộ nhớ-đói hoặc khi tất cả các yếu tố của phạm vi không bao giờ được sử dụng (chẳng hạn như khi loop thường chấm dứt với break).
lưu ý:
Furthermore, cách chỉ rõ ràng để access số nguyên tạo ra bởi range() là để iterate qua chúng,
không. Kể từ khi range các đối tượng trong Python 3 immutable chuỗi, họ hỗ trợ lập chỉ mục như là tốt. Trích dẫn từ tài liệu hướng dẫn function range,
phạm vi thực hiện tất cả các hoạt động trình tự thông thường ngoại trừ concatenation và lặp lại... Phạm vi đối tượng thực hiện collections.abc.Sequence ABC, và cung cấp các tính năng như ngăn chặn các xét nghiệm, element chỉ số tra cứu , slicing và hỗ trợ cho chỉ số tiêu cực.
ví dụ,
print(range(10, 20)[5])
# 15
print(range(10, 20)[2:5])
# range(12, 15)
print(list(range(10, 20)[2:5]))
# [12, 13, 14]
print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]
print(18 in range(10, 20))
# True
print(100 in range(10, 20))
# False
tất cả những có thể với chuỗi đó range immutable .
Đã bình luận 03/6/2016 bởi n6146 (640 điểm)
có thể trùng lặp của [lười biếng evaluation python] (http://stackoverflow.com/questions/ 20535342 /lazy-evaluation-python)
0 Phiếu
Đã trả lời 03/6/2016 bởi Shila (240 điểm)
nó phụ thuộc. trong python-2.x, range thực sự tạo ra một danh sách (mà cũng là một trình tự) trong khi xrange tạo ra một object xrange có thể được sử dụng để iterate qua các giá trị. Mặt khác, trong python-3.x, range tạo ra một iterable (hoặc cụ thể hơn, là một trình tự)
Đã bình luận 03/6/2016 bởi Ng6240 (260 điểm)
Câu hỏi này không phải nhận thức được sự khác biệt giữa Python 2 và 3, và * không * một người bị mắc mưu của một liên kết.
Đã bình luận 04/6/2016 bởi Gue_9532 (380 điểm)
có thể lặp lại của [nên bạn luôn luôn ưu tiên xrange() hơn range()?] (http://stackoverflow.com/questions/ 135041 /should-you-always-favor-xrange-over-range)

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...