将嵌套列表操作转换为列表推导表达式

时间:2014-11-06 06:55:13

标签: python python-2.7 list-comprehension

我正在使用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]]

不知何故,我无法将此代码置于列表理解模式中。

3 个答案:

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