簡體   English   中英

為什么python在列表理解中要求括號

[英]Why does python asks for parentheses in list comprehension

我是編碼新手,我試圖解決一些關於同時迭代兩個列表的列表問題。

我的代碼是這樣的:

list1 = [10, 20, 30, 40]
list2 = [100, 200, 300, 400]

mx = [x,y for x,y in zip(list1, list2[::-1])]

print(mx)

但是它沒有用,而是這段代碼有效

list1 = [10, 20, 30, 40]
list2 = [100, 200, 300, 400]

for x, y in zip(list1, list2[::-1]):
    print(x, y)

不:我無法將我的代碼添加到正確草稿中抱歉:/

為什么第一個代碼會拋出一個錯誤,指出“你忘記了理解目標周圍的括號”,為什么需要括號。

這是為了消除范圍模糊。 考慮以下聲明:-

“去葯店,在從葯店回家的路上去拜訪屠夫,偷他的錢”。

-:這可能意味着您應該從化學家或屠夫那里偷東西,具體取決於括號的位置:

從葯劑師那里偷東西:“去找葯劑師(在從葯劑師回家的路上拜訪屠夫)偷他的錢”

從屠夫那里偷東西:“去找葯劑師(在從葯劑師回家的路上拜訪屠夫,偷他的錢)”

因此,在我的示例中,放置括號的位置(以及因此應用“竊取”的方式)改變了含義。

同樣,“x,y for x,y in...”可能意味着:

1: "(x), (y for x, y) in..."
2: "(x,y) for (x,y) in..."

實際上還有其他一些解釋。

人們認為 Python 給出錯誤比試圖解釋歧義更好,因此堅持使用括號。

見: https ://www.philosophyetc.net/2004/08/scopal-ambiguity.html

我想最初它是python語言作者的首選。

PEP 202(列表推導)明確規定

不允許使用[x, y for ...]形式; 需要寫[(x, y) for ...]

不告訴我們原因,但您可以閱讀作者之間的郵件 在線程中,您可以找到

但是,我想我更喜歡

[(x, x*2) for x in seq]

超過

[x, x*2 for x in seq]

另一個帖子說:

不過,FWIW,我更喜歡

[(x, x*2) for x in seq]

也。

這似乎不是因為解析器的歧義,而是因為人類的可讀性。 Guido van Rossum 說:

如果您不想支持[x, y for ...]因為它是模棱兩可的(對於人類讀者,而不是解析器!)...

事實上,在發展階段,Greg Ewing 似乎可以實施以下措施:

[x, x*2 for x in seq]

[(1, 2), (2, 4), (3, 6), (4, 8), (5, 10)]

是的,它有效!

但他們最終不允許它(可能)有利於可讀性。

暫無
暫無

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

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