【问题标题】:List comprehension in nested ifs嵌套 ifs 中的列表理解
【发布时间】:2022-11-24 13:10:50
【问题描述】:
我是一个新手,试图了解 python 中的列表理解。我的问题与其他帖子不同。
我被要求编写列表理解代码以获得以下输出:
从 1 到 30(包括两者)的所有奇数。那些是 5 的倍数的将标有“x”。
[1, 3, '5x', 7, 9, 11, 13, '15x', 17, 19, 21, 23, '25x', 27, 29]
为此,我尝试使用正常的 for 和 if 方法来获取它。这是我的解决方案并且有效:
odds = []
for i in list(range(1,30+1)):
if i%2 !=0:
odds.append(i)
if i%5 == 0:
odds.append(f'{i}x')
odds.remove(i)
print(odds)
在图像中,您可以找到我失败的列表理解尝试。我需要一些光线才能正确放置其余的东西。
谢谢!
【问题讨论】:
标签:
python
list-comprehension
【解决方案1】:
您不能单独使用列表理解在一行中解决这个问题。您需要三元运算符(括在括号中)。
[(n if n%5 else f'{n}x') for n in range(1,31) if n%2]
【解决方案2】:
这是一个带有三元运算符的单行代码:
[f"{i}x" if i % 5 == 0 else i for i in range(1, 31) if i % 5 == 0 or i % 2 != 0]
【解决方案3】:
如果您不关心项目的顺序,您可以通过连接两个列表理解产生的列表来避免三元运算符,例如
[n for n in range(1,31,2) if n%5 != 0] + [f'{n}x' for n in range(1,31,2) if n%5 == 0]
...产生:
[1, 3, 7, 9, 11, 13, 17, 19, 21, 23, 27, 29, '5x', '15x', '25x']