2016-07-28 77 views
-2

我一直在一個項目中工作,然後我意外地發現了 當我傳遞字符串時,它們被分割成list(),但是當我將相同的字符串傳遞給[ ]時,沒有將字符串拆分成單個字母。字符串被分割爲'list()'而不是'[]'爲什麼?

有誰能告訴我發生了什麼嗎?

>>> y = list("hello") 
>>> y 
['h', 'e', 'l', 'l', 'o'] 
>>> z = ["hello"] 
>>> z 
['hello'] 
+0

字符串你檢查的文檔爲['名單()'](HTTPS數組(列表)://文檔。 python.org/2.7/library/functions.html#list)? –

回答

3

因爲list constructor將迭代作爲參數,並根據可迭代的項目構造列表。在你的情況下,它會抓住字符串中的每個單獨的子字符串,並將它們作爲項目。

相反,[]是一個替代構造函數,它根據提供的逗號分隔值的元素構造列表,不執行其他操作。

s = "hello" 
l = [*s] 
print(l) # ['h', 'e', 'l', 'l', 'o'] 

Python版本,你可以得到相同結果與理解:

您可以通過拆包方括號中的字符串實現了類似的結果與在Python 3 []

l = [char for char in s] 
0

>>> y = list("hello") 你問蟒蛇從"hello"建立一個列表,SI它切串元素

>>> z = ["hello"] 你犯了一個清單,一個單一的元素hello

0

名單( )方法從給定的輸入中列出一個列表。

帶方括號的版本意味着您想創建一個包含您的字符串的元素的列表。因此它不會分裂。

0

Y =列表(「你好」) 列表()是一個內置的函數,它可迭代和「返回一個列表中的項目與迭代項目的順序相同且順序相同「(請參見https://docs.python.org/2/library/functions.html#list)。

z = [「hello」] 這只是一個單個元素(字符串類型)的列表。

2

list是一個builtin需要可迭代並將其變成一個列表。

[]另一方面是定義列表的的語言結構。爲了達到與構造[]相同的結果,您可以使用理解:

>>> z = [i for i in "hello"] 
>>> z 
['h', 'e', 'l', 'l', 'o'] 
1

字符串是可迭代的。 list函數(實際上它是一種類型,但它是可調用的)遍歷它的參數,使迭代器中的每個元素(在你的情況中,字符串的每個字符)都是結果列表的一個元素。

對於任何迭代,這幾乎是相同的。你在做什麼是等效字符串的

>>> list([1, 2, 3]) 
[1, 2, 3] 
>>> [[1, 2, 3]] 
[[1, 2, 3]] 

的。這就是說,在第二種情況下,你獲得一個包含在第一個你由的各個元素的列表中的單個迭代,同時列表迭代。

0

在你的第一個例子中,

>>> y = list("hello") 

你鑄造字符串 「hello」 的名單

在第二個例子;

>>> z = ["hello"] 

你正在創建一個項目是與內容「你好」

相關問題