[英]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
東西。 三元表達式選擇expr1
和expr2
中的一個,就是這樣。
當我嘗試了一個像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.