Python 列表理解中是否有if/else/if可能?
我想知道是否可以将列表理解与Python 列表理解中是否有if/else/if可能?,python,list-comprehension,Python,List Comprehension,我想知道是否可以将列表理解与if/else一起使用,而不必生成与正在处理的列表长度相同的列表?(即没有最后的else) 我本以为这会奏效: >>> [v * 10 if v < 3 else v * 2 if v > 3 for v in L] #if/else/if >>> [v * 10 if v < 3 else v * 2 if v > 3 else pass for v in L] #if/else/if/else pass
if
/else
一起使用,而不必生成与正在处理的列表长度相同的列表?(即没有最后的else
)
我本以为这会奏效:
>>> [v * 10 if v < 3 else v * 2 if v > 3 for v in L] #if/else/if
>>> [v * 10 if v < 3 else v * 2 if v > 3 else pass for v in L] #if/else/if/else pass
>>>[v*10如果v<3否则v*2如果v>3表示L中的v]#如果/else/if
但这是一个语法错误
所以我想“也许”这会奏效:
>>> [v * 10 if v < 3 else v * 2 if v > 3 for v in L] #if/else/if
>>> [v * 10 if v < 3 else v * 2 if v > 3 else pass for v in L] #if/else/if/else pass
>>>[v*10如果v<3 else v*2如果v>3 else为L中的v通过]#if/else/if/else通过
但事实并非如此
这是一个好奇的问题,我意识到这不一定是上述处理的最具可读性/最合适的方法
我错过什么了吗?能做到吗?
(我使用的是python 2.6.5)是的,这是可能的:
[foo for foo in bar if foo.something]
或者在您的情况下:
[v * 10 if v < 3 else v * 2 for v in L if v != 3]
[v*10如果v<3,则为v*2如果v!=3,则为L中的v]
我在中也提到过。将过滤条件放在循环之后:
[v * 10 if v < 3 else v * 2 for v in L if v != 3]
这样做有什么不对
out = []
for v in L:
if v < 3:
out.append(v * 10)
elif v > 3:
out.append(v * 2)
else:
pass
out=[]
对于L中的v:
如果v<3:
out.append(v*10)
elif v>3:
out.append(v*2)
其他:
通过
A=[[x*2,x*10][x这并没有回答我关于列表理解的相当明确的问题!不是所有的东西都必须是列表理解,也不是所有的东西都必须是列表组合!把它想象成一个普通的列表理解[expr\u of x for x in iterable if expr\u of x]
,但在哪里(A if b else c)
是一个表达式。你甚至可以保留括号,让读者更清楚地理解列表。你能解释一下为什么这可以解决问题吗?这个答案因其长度和内容而被标记为低质量。请参阅。
out = []
for v in L:
if v < 3:
out.append(v * 10)
elif v > 3:
out.append(v * 2)
else:
pass
A=[[x*2, x*10][x <3] for x in L if x!=3]