爲什麼Python 3中的[range(10)]
和list(range(10))
不同?爲什麼[範圍(10)]和列表(範圍(10))不一樣?
輸出如下:
>>> print([range(10)])
[range(0, 10)]
>>> print(list(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
爲什麼Python 3中的[range(10)]
和list(range(10))
不同?爲什麼[範圍(10)]和列表(範圍(10))不一樣?
輸出如下:
>>> print([range(10)])
[range(0, 10)]
>>> print(list(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
引用the docs, 「名單可在幾個方面構建」:
[range(10)]
建立1項的列表中,range object。通常用逗號分隔的方括號內的項目列表構成了所述項目的列表。
list(range(10))
經過range object作爲參數傳遞給list constructor:
class list([iterable])
的構造函數建立,其項目是相同的,以相同的順序爲迭代的項的列表。 可迭代可以是序列,支持迭代的容器或迭代器對象。如果可迭代已經是一個列表,則複製將被創建並返回,與
iterable[:]
類似。例如,list('abc')
返回['a', 'b', 'c']
和list((1, 2, 3))
返回[1, 2, 3]
。如果沒有給出參數,構造函數會創建一個新的空列表[]
。
Python 3中的範圍3 represents an immutable sequence of numbers,所以在您的情況下,結果列表是範圍中的數字列表。
[x]
是指 「使其一個元件是x
列表」。
list(x)
表示「製作一個列表,其元素是元素x
」。
range(10)
返回打印作爲range(0, 10)
(因爲它顯示起始值它打印時)和其元素爲整數0至9,所以[range(10)]
給出了一個元素的列表[range(0, 10)]
和list(range(10))
給出了10元素的對象列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
。
在第一個示例中,您只需使用方括號表示法創建一個列表對象,並在其中放置一個range()
對象。另一方面,在你的第二個例子中,你使用list()
內建的將的range()
對象轉換爲列表。
區別在於,使用[]
只是創建一個列表。它對傳入的內容沒有任何作用。另一方面,list()
將返回一個空列表,如果您沒有傳入任何內容,或嘗試將您傳入的內容轉換爲列表對象。
The documentation for list()
notes this:
的構造函數建立,其項目是相同的,在相同的順序可迭代的項目清單。可迭代可以是序列,支持迭代的容器或迭代器對象。如果可迭代已經是一個列表,則複製被創建並返回,類似於iterable [:]。例如,list('abc')返回['a','b','c']和列表((1,2,3))返回[1,2,3]。如果沒有給出參數,構造函數會創建一個新的空列表[]。在python 3.X
range()
功能類似於在python 2.x.In的Python 2.x的所述xrange()
功能range()
產生的列表,並返回xrange()
一個迭代 - 序列對象
在蟒2.x的
>>> range(1)
[0]
>>> type(range(1))
<type 'list'>
在蟒3.X
>>> range(1)
range(0, 1)
>>> type(range(1))
<class 'range'>
並得到一個列表,你可以通過在list()
>>> print (list(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
更多參考發生器,讀here
我知道這已經被問過,但我不能找到一個傻瓜目標。谷歌沒有發現任何相關的東西。 – user2357112
@JanHudec感謝您的回覆,但您可以擴展更多關於您的意思嗎? – Seoul
@ user2357112是的,我試圖查看它,只是決定問我是否因爲贊成分數而不知道分數 – Seoul