2017-07-04 135 views
3

爲什麼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] 
+0

我知道這已經被問過,但我不能找到一個傻瓜目標。谷歌沒有發現任何相關的東西。 – user2357112

+0

@JanHudec感謝您的回覆,但您可以擴展更多關於您的意思嗎? – Seoul

+0

@ user2357112是的,我試圖查看它,只是決定問我是否因爲贊成分數而不知道分數 – Seoul

回答

11

引用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,所以在您的情況下,結果列表是範圍中的數字列表。

5

[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]

1

在第一個示例中,您只需使用方括號表示法創建一個列表對象,並在其中放置一個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

-1

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

相關問題