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

List Comprehension of certain elements on a nested list

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

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]]

您可以使用以下列表理解

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

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

只需在结果中包含 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]]

看来你从根本上误解了理解。他们不会就地修改原始文件,而是构建一个新文件。这就是为什么,如果你只取原作的一部分,你只能得到原作的一部分。

如果您想修改某些部分,那么循环可能会更好地为您服务,而且它没有任何不符合 Python 的地方。

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

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

这种情况适用于列表中除第一个值之外的所有值。