【问题标题】: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']

        【讨论】:

          猜你喜欢
          • 2011-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-24
          • 2013-08-07
          相关资源
          最近更新 更多