如何从子列表的成员中减去常量?

时间:2016-10-08 03:10:49

标签: python list-comprehension

我知道我可以从这样一个简单列表的所有成员中减去一个常量:

l = [ 123, 124, 125, 126 ]
l = [v - 100 for v in l]

但是如何从列表中每个子列表的一个或多个特定成员中减去一个常量?

假设我有:

l = [ [101, 102, 103], [111, 122, 133], [222, 333, 444] ]

我想从每个子列表的第2和第3个元素中减去100,给我:

[ [101, 2, 3], [111, 22, 33], [222, 233, 344] ]

有没有直接的Pythonic方法来做到这一点?

3 个答案:

答案 0 :(得分:1)

以最简单的形式,您可以解压缩子列表并将操作应用于所需的项目:

In [1]: l = [ [101, 2, 3], [111, 22, 33], [222, 233, 344] ]

In [2]: [[x, y - 100, z - 100] for x, y, z in l]
Out[2]: [[101, -98, -97], [111, -78, -67], [222, 133, 244]]

或者,更具可扩展性的方法是使嵌套列表理解:

In [3]: [[item[0]] + [x - 100 for x in item[1:]] for item in l]
Out[3]: [[101, -98, -97], [111, -78, -67], [222, 133, 244]]

答案 1 :(得分:0)

如果你真的想要一个单行,请尝试:

l = map(lambda x : x[0:1]+map(lambda y: y-100, x[1:3])+x[3:], l)

Python对于非常简单的事情有一些很好的语法,但对于这样的事情,你最好使用函数或循环。

答案 2 :(得分:0)

AND