[英]Why does creating a list of tuples using list comprehension requires parentheses?
[英]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.