我正在使用Python 2.7.x
我的问题:
我有一份清单如下:
a = [[1,3,2,8],[2,1,4,5],[3,2,4],[4,2,3,5]]
现在对于值为2的所有元素,我希望将它们更改为9,除了每个子列表的第一个值。那就是:
for sublist in a:
for i in range(1, len(sublist)):
if sublist[i] == 2:
sublist[i] = 9
所以现在
a = [[1,3,9,8],[2,1,4,5],[3,9,4],[4,9,3,5]]
不知何故,我无法将此代码置于列表理解模式中。
答案 0 :(得分:1)
这应该这样做:
[[9 if val == 2 and i > 0 else val for i, val in enumerate(sublist)] for sublist in a]
或者,正如@BurhanKhalid在评论中所说:
[[sublist[0]] + [9 if val == 2 else val for val in sublist[1:]] for sublist in a]
输出:
[[1, 3, 9, 8], [2, 1, 4, 5], [3, 9, 4], [4, 9, 3, 5]]
答案 1 :(得分:0)
您可以使用map
而不是嵌套循环。
[[lst[0]]+map(lambda x: 9 if x==2 else x, lst[1:]) for lst in a]
答案 2 :(得分:0)
>>> a = [[1,3,2,8],[2,1,4,5],[3,2,4],[4,2,3,5]]
>>> [[j if j!=2 else 9 for j in i] for i in a]
[[1, 3, 9, 8], [9, 1, 4, 5], [3, 9, 4], [4, 9, 3, 5]]