如何在Python中减去多维数组?

时间:2014-04-13 02:54:34

标签: python multidimensional-array

我有这个多维数组:

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

我想用1减去所有这些。结果将是:

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

5 个答案:

答案 0 :(得分:4)

如果您确实有列表列表,请使用嵌套列表解析:

In [13]: result = [[e-1 for e in i] for i in n]

In [14]: print result
[[0], [1], [2], [3], [4], [5], [6, 9], [7], [8], [6, 9]]

答案 1 :(得分:2)

for x in n:
    for i, y in enumerate(x):
        x[i] = y - 1

这至少在空间方面更有效率。

或者如果你想使用像zhangxaochen这样的嵌套列表理解,但是将它分配给相同的值,那么就可以了:

n[:] = [[b - 1 for b in a] for a in n]

请注意,这实际上仍会创建两个额外的列表,因此它具有与将其分配给新数组相同的空间复杂性。

答案 2 :(得分:1)

result=n
for a in range(len(n)):
    for b in range(len(n[a])):
        result[a][b]=n[a][b]-1

答案 3 :(得分:1)

或者您可以使用map()

>>> import operator
>>> n = [[1], [2], [3], [4], [5], [6], [7, 10], [8], [9], [7, 10]]
>>> map(lambda x: map(lambda y: operator.sub(y, 1), x), n)
[[0], [1], [2], [3], [4], [5], [6, 9], [7], [8], [6, 9]]

答案 4 :(得分:1)

def difference(a, n):
    try:
        return a - n
    except TypeError:
        return [difference(i, n) for i in a]

>>> difference([[1], [2], [3], [4], [5], [6], [7, 10], [8], [9], [7, 10]], 1)
[[0], [1], [2], [3], [4], [5], [6, 9], [7], [8], [6, 9]]
>>> difference([3, [1, 9, [1, 2, [3, 4, [5, 6]]]], [2], [[3, 4], [5, 6]], [3], [7, 10]], 1)
[2, [0, 8, [0, 1, [2, 3, [4, 5]]]], [1], [[2, 3], [4, 5]], [2], [6, 9]]

适用于所有多维列表。