三元迭代是否可行?我的意思的简单版本,虽然这个特定的例子可以更好的方式完成:
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
答案 0 :(得分:5)
你的“实际例子”写成:
>>> 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
示例,但使用内置方法没有任何问题)
答案 1 :(得分:1)
@Jon Clements给了你一个很好的答案:如何使用Python成语来解决问题。如果其他Python程序员查看他的代码,他们会立即理解它。这是使用Python完成它的正确方法。
回答你的实际问题:不,那不行。三元运算符具有以下形式:
expr1 if condition else expr2
condition
必须是评估为bool
的内容。三元表达式选择expr1
和expr2
中的一个,就是这样。
当我尝试像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不会将赋值视为表达式,从而避免了这个错误。
你不能错误地做,也不能故意这样做。
答案 2 :(得分:0)
您还可以选择具有列表推导的项目,并获取列表中的元素数量。
strList = ['Ulis', 'Tolus', 'Utah', 'Ralf', 'Chair']
len([k for k in strList if k.startswith('U')])