列表理解嵌套列表中的某些元素
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]
这种情况适用于列表中除第一个值之外的所有值。
我只想对每个子列表的第二个和第三个元素进行列表理解。我已经能够做到这一点,但我失去了第一个元素。我知道我可以用 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]
这种情况适用于列表中除第一个值之外的所有值。