【问题标题】:How to add two element into a list using list comprehension in python如何使用python中的列表理解将两个元素添加到列表中
【发布时间】:2014-08-26 07:57:13
【问题描述】:

有没有办法在列表推导中添加两个值?

 [[x-0.5, x] if x != 0 and x % 30 == 0 else x for x in range(0, 60 + 1, 5)]

我尝试了上面的代码,它返回了

 [0, 5, 10, 15, 20, 25, [29.5, 30], 35, 40, 45, 50, 55, [59.5, 60]]

我也试过了

def f(x):
    return x-0.5, x
[f(x) if x !=0 and x % 30 == 0 else x for x in range(0, 60 + 1, 5)]

返回

[0, 5, 10, 15, 20, 25, (29.5, 30), 35, 40, 45, 50, 55, (59.5, 60)]

如何去掉括号?

编辑:

这是我所期待的

 [0, 5, 10, 15, 20, 25, 29.5, 30, 35, 40, 45, 50, 55, 59.5, 60]

谢谢

【问题讨论】:

  • 你能提供预期的输入和输出吗?
  • 你想要60 在列表末尾吗?
  • 感谢您的回复,我希望 x-0.5xx % 30 == 0 时出现在列表中,在这种情况下,我希望 29.5 和 30 以及 59.5 和 60 出现在列表中

标签: python


【解决方案1】:

list comprehension 中可以有多个 for 循环:

[y for x in range(0, 60 + 1, 5) 
   for y in ([x-0.5, x] if x != 0 and x % 30 == 0 else [x])]

产量

[0, 5, 10, 15, 20, 25, 29.5, 30, 35, 40, 45, 50, 55, 59.5, 60]

并且等价于:

result = []
for x in range(0, 60 + 1, 5):
    for y in ([x-0.5, x] if x != 0 and x % 30 == 0 else [x]):
        result.append(y)

【讨论】:

  • 显然 OP 的字面意思不是“添加”——他们只是更新了问题。 (否则这是正确的)
  • 哇,谢谢,我从没想过您可以在列表理解中执行多个循环,尽管您能解释一下解决方案与返回错误的[[x-0.5, x] if x !=0 and x % 30 == 0 else x for [x] in range(0, 60 + 1, 5)] 有何不同?
  • Python 将其解析为[conditional-expression for x in range(...)]。列表推导前面的条件表达式是填充列表推导返回的列表的值。因此,如果[x-0.5, x] 是条件表达式返回的值,那么这就是最终成为列表推导中的值的列表。
  • 我假设您的意思不是 [... for [x] in range(...)],因为这会导致 TypeError。
猜你喜欢
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2015-08-09
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多