我只是想知道是否有更好的方法使用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
答案 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]