如何使用python中的列表推导修改列表列表中的特定项目

时间:2017-11-02 02:23:26

标签: python list list-comprehension

我只是想知道是否有更好的方法使用List comprehension修改列表列表中的特定项目? 在下面的例子中,我正在列出列表中每个列表的第二项,但是,我不想消除内部列表理解。

l = [
[1,2,3,],
[4,5,6,],
[7,8,9,],
]

nl = [[num**2 if i==1 else num for i, num in enumerate(x)] for x in l]
print nl

2 个答案:

答案 0 :(得分:2)

不确定如何保持内心理解,但你可以这样做:

def square_idx_one(sl):
    sl[1] **= 2
    return sl

l = [
[1,2,3,],
[4,5,6,],
[7,8,9,],
]

nl = [square_idx_one(sl) for sl in l]
print (nl)

结果:

[[1, 4, 3], [4, 25, 6], [7, 64, 9]]

但如果您正在修改原始内容,我认为for循环可能会将此解决方案用于性能,更不用说内存了

答案 1 :(得分:2)

在您的情况下,只需

print [[x, y**2, z] for x, y, z in l]

会做这项工作并更明确地说明发生了什么。一般来说,做

from itertools import izip
p = (1, 2, 1) # element 0 power 1
#             # element 1 power 2
#             # element 2 power 1
# ...
print [[x**power for x, power in izip(row, p)] for row in l]