簡體   English   中英

列表初始化的 Python 列表

[英]Python list of list initialize

我知道

[[]] * 10

將給出 10 個相同空的引用,並且

[[] for i in range(10)]

將給出 10 個空列表。 但在這個例子中:

def get_list(thing):
  return [thing for i in range(10)]
a = get_list([])
a[0].append(1)
print(a)

為什么結果又是

[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]

編輯:

與問題List of lists changes床意外地反映在子列表中不同,我知道 Python 不會在[x]*10進行復制。

但是為什么[][[] for i in range(10)]是特殊的? 我認為這是不一致的。 Python 不是創建一個空列表[]然后傳遞給[ ___ for i in range(10)] ,而是從字面上理解 "[]" 並為每個i執行 "[]" 。

那是因為thing是同一個列表。

[[] for i in range(10)]每次都會生成一個新列表。

[thing for i in range(10)]它始終是名為thing的列表。

我現在明白為什么我錯了。 我回答我的問題:

我誤解了python中的列表理解

[ ___ for i in range(10)]

這不像將擴充傳遞給函數。 列表理解每次在其循環中按字面意思執行您的表達式。

表達式[] in [ [] for i in range(10)]每次都會執行,因此您會為每個條目獲得一個新的空列表。

[thing for i in range(10)] expression thing被執行,結果總是一樣的:對一個空列表的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM