如何在列表推导中使用条件表达式(带有 if 和 else 的表达式)?[重复]
- 2025-04-15 09:20:00
- admin 原创
- 29
问题描述:
我有一个列表推导,可以生成给定范围的奇数列表:
[x for x in range(1, 10) if x % 2]
这会创建一个过滤器,删除偶数。相反,我想使用条件逻辑,这样偶数会被区别对待,但仍会被计入列表。我尝试了以下代码,但失败了:
>>> [x for x in range(1, 10) if x % 2 else x * 100]
File "<stdin>", line 1
[x for x in range(1, 10) if x % 2 else x * 100]
^
SyntaxError: invalid syntax
我知道 Python 表达式允许这样的语法:
1 if 0 is 0 else 3
我如何在列表理解中使用它?
解决方案 1:
x if y else z
是为每个元素返回的表达式的语法。因此,你需要:
[ x if x%2 else x*100 for x in range(1, 10) ]
造成混淆的原因是,在第一个示例中使用了过滤器,但在第二个示例中却没有。在第二个示例中,您只是使用三元运算符表达式将每个值映射到另一个值。
使用过滤器,您需要:
[ EXP for x in seq if COND ]
如果没有过滤器,您需要:
[ EXP for x in seq ]
而在第二个例子中,表达式是一个“复杂”表达式,恰好涉及一个if-else
。
解决方案 2:
[x if x % 2 else x * 100 for x in range(1, 10) ]
解决方案 3:
您也可以使用列表推导来做到这一点:
A=[[x*100, x][x % 2 != 0] for x in range(1,11)]
print A
解决方案 4:
这只是另一个解决方案,希望有人会喜欢它:
使用:False, True
>>> map(lambda x: [x*100, x][x % 2 != 0], range(1,10))
[1, 200, 3, 400, 5, 600, 7, 800, 9]
>>>
解决方案 5:
如何计算正负值数组的平方
my_list=[-2,-3,0,1,5]
squred_values=[]
squred_values=[-i**2 if i<0 else i**2 for i in my_list]
#或者
for i in my_list:
if i<0:
squred_values.append( -i**2)`enter code here`
else:
squred_values.append( i**2)
解决方案 6:
一个列表推导式中包含两个 for
ex = [['obi', 'is', '#alive'],['oge', 'is', 'beautiful'],
['Ade', 'the', '#comedian', 'de', '#rich'],['Jesus', 'wept']]
res = [j if j.startswith("#") else "_"+j for i in ex for j in i]
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD