我一直在一個項目中工作,然後我意外地發現了 當我傳遞字符串時,它們被分割成list()
,但是當我將相同的字符串傳遞給[ ]
時,沒有將字符串拆分成單個字母。字符串被分割爲'list()'而不是'[]'爲什麼?
有誰能告訴我發生了什麼嗎?
>>> y = list("hello")
>>> y
['h', 'e', 'l', 'l', 'o']
>>> z = ["hello"]
>>> z
['hello']
我一直在一個項目中工作,然後我意外地發現了 當我傳遞字符串時,它們被分割成list()
,但是當我將相同的字符串傳遞給[ ]
時,沒有將字符串拆分成單個字母。字符串被分割爲'list()'而不是'[]'爲什麼?
有誰能告訴我發生了什麼嗎?
>>> y = list("hello")
>>> y
['h', 'e', 'l', 'l', 'o']
>>> z = ["hello"]
>>> z
['hello']
因爲list
constructor將迭代作爲參數,並根據可迭代的項目構造列表。在你的情況下,它會抓住字符串中的每個單獨的子字符串,並將它們作爲項目。
相反,[]
是一個替代構造函數,它根據提供的逗號分隔值的元素構造列表,不執行其他操作。
s = "hello"
l = [*s]
print(l) # ['h', 'e', 'l', 'l', 'o']
在都 Python版本,你可以得到相同結果與理解:
您可以通過拆包方括號中的字符串實現了類似的結果與在Python 3 []
:
l = [char for char in s]
在>>> y = list("hello")
你問蟒蛇從"hello"
建立一個列表,SI它切串元素
和>>> z = ["hello"]
你犯了一個清單,一個單一的元素hello
名單( )方法從給定的輸入中列出一個列表。
帶方括號的版本意味着您想創建一個包含您的字符串的元素的列表。因此它不會分裂。
Y =列表(「你好」) 列表()是一個內置的函數,它可迭代和「返回一個列表中的項目與迭代項目的順序相同且順序相同「(請參見https://docs.python.org/2/library/functions.html#list)。
z = [「hello」] 這只是一個單個元素(字符串類型)的列表。
list
是一個builtin
需要可迭代並將其變成一個列表。
[]
另一方面是定義列表的的語言結構。爲了達到與構造[]
相同的結果,您可以使用理解:
>>> z = [i for i in "hello"]
>>> z
['h', 'e', 'l', 'l', 'o']
字符串是可迭代的。 list
函數(實際上它是一種類型,但它是可調用的)遍歷它的參數,使迭代器中的每個元素(在你的情況中,字符串的每個字符)都是結果列表的一個元素。
對於任何迭代,這幾乎是相同的。你在做什麼是等效字符串的
>>> list([1, 2, 3])
[1, 2, 3]
>>> [[1, 2, 3]]
[[1, 2, 3]]
的。這就是說,在第二種情況下,你獲得一個包含在第一個你由的各個元素的列表中的單個迭代,同時列表迭代。
在你的第一個例子中,
>>> y = list("hello")
你鑄造字符串 「hello」 的名單
在第二個例子;
>>> z = ["hello"]
你正在創建一個項目是與內容「你好」
字符串你檢查的文檔爲['名單()'](HTTPS數組(列表)://文檔。 python.org/2.7/library/functions.html#list)? –