Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表理解中是否有if/else/if可能?_Python_List Comprehension - Fatal编程技术网

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]