簡體   English   中英

python三元迭代與列表理解

[英]python ternary iteration with list comprehension

三元迭代是否可能? 我的意思的簡單版本,雖然這個特定的例子可以更好的方式完成:

c = 0  
list1 = [4, 6, 7, 3, 4, 5, 3, 4]  
c += 1 if 4 == i for i in list1 else 0  

一個更實際的例子:

strList = ['Ulis', 'Tolus', 'Utah', 'Ralf', 'Chair']
counter = 0  
counter += 1 if True == i.startswith('U') for i in strList else 0  
return counter  

你的“實際例子”寫成:

>>> strList = ['Ulis', 'Tolus', 'Utah', 'Ralf', 'Chair']
>>> sum(1 for el in strList if el.startswith('U'))
2

你的另一個例子(如果我理解正確的話)是:

>>> list1 = [4, 6, 7, 3, 4, 5, 3, 4]
>>> list1.count(4)
3

(或者只是調整strList示例,但使用內置方法沒有錯)

@Jon Clements給了你一個很好的答案:如何使用Python成語來解決問題。 如果其他Python程序員查看他的代碼,他們會立即理解它。 這是使用Python完成它的正確方法。

要回答你的實際問題:不,這不起作用。 三元運算符具有以下形式:

expr1 if condition else expr2

condition必須是評估為bool東西。 三元表達式選擇expr1expr2中的一個,就是這樣。

當我嘗試了一個像c += 1 if condition else 0的表達式, c += 1 if condition else 0我很驚訝它有效,並注意到在這個答案的第一個版本中。 @TokenMacGuy指出,真正發生的事情是:

c += (1 if condition else 0)

因此,即使你處於適當的狀態而不是某種循環,你也不可能做你想做的事情。 上面的情況可行,但這樣的事情會失敗:

c += 1 if condition else x += 2  # syntax error on x += 2

這是因為Python不會將賦值語句視為表達式。

你不能犯這個常見的錯誤:

if x = 3:  # syntax error!  Cannot put assignment statement here
    print("x: {}".format(x))

程序員可能希望x == 3來測試值,但鍵入x = 3 Python通過不考慮作為表達式的賦值來防止這種錯誤。

你不能錯誤地做到這一點,你也不能故意這樣做。

您還可以使用列表推導選擇項目,並獲取列表中的元素數量。

strList = ['Ulis', 'Tolus', 'Utah', 'Ralf', 'Chair']
len([k for k in strList if k.startswith('U')])

暫無
暫無

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

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