列表理解嵌套列表中的某些元素

时间:2015-05-21 19:05:40

标签: python python-2.7 list-comprehension

我想仅对每个子列表的第二和第三个元素进行列表理解。我已经能够做到这一点,但我失去了第一个元素。我知道我可以通过for循环很容易地做到这一点,但我想成为pythonic(惯用的python)并使用list comprehension。

test = [[3,6,9],[3,6,9]]
v = [[x/3.0 for x in y[1:3]] for y in test]
print v

输出

[[2.0, 3.0], [2.0, 3.0]]

期望的输出

[[3, 2.0, 3.0], [3, 2.0, 3.0]]

3 个答案:

答案 0 :(得分:2)

只需在结果中加入y[:1] +

>>> test = [[3,6,9],[3,6,9]]
>>> [y[:1] + [x/3.0 for x in y[1:3]] for y in test]
[[3, 2.0, 3.0], [3, 2.0, 3.0]]

看起来你从根本上误解了理解。他们不会修改原始原位,他们会建立一个新的。这就是为什么,如果你只拿原版的一部分,你只能获得原版的一部分。

如果你想修改某些部分,那么一个循环可能会更好地为你提供服务,并且没有任何关于它的单一声音。

答案 1 :(得分:2)

另一种解决方案是使用三元运算符检查您是否正在处理第一个元素:

v = [[elem/3.0 if idx!=0 else elem for idx, elem in enumerate(k)] for k in test]

此案例将用于列表的所有值,但第一个除外。

答案 2 :(得分:0)

您可以使用以下列表理解

>>> [[i[0]] + [j/i[0] for j in i[1:]] for i in test]
[[3, 2.0, 3.0], [3, 2.0, 3.0]]

注意,如果您希望每个子列表的第一个元素可能为零,则不会阻止被零除。