Python 中列表中的每个元素减 1

Subtract 1 from each element in the list in Python

我有一个列表,A。我想从列表的每个元素中减去 1。所需的输出如下所示。

A=[5, 6, 7, 11]

期望的输出是

A=[4, 5, 6, 10]

Python 中的整数不可变。因此,没有修改现有列表元素的选项。不过它们可以更换。因此,一个可能的解决方案是用一个副本覆盖列表,其整数被减去:

A = [v-1 for v in A]

如果要求保留列表实例A而不是用新的列表实例替换它,那么按照其他答案的建议,你可以从项目中迭代和减去:

for i, v in enumerate(A):
    A[i] = v-1

由于整数是不可变的,减去的值实际上将是新的整数实例,但包含它们的列表 A 将保持相同的实例。

一种方法是

A = [*map(lambda x: x - 1, A)]

代码

a = [5, 6, 7, 11]
a = [*map(lambda x: x - 1, a)]
print(a)

输出

[4, 5, 6, 10]

表达式lambda x: x - 1 returns一个函数对象,它接受一个参数并将该参数减1,返回结果。 map(lambda x: x - 1, a) returns 将此函数应用于可迭代对象(在我们的示例中为列表)中的每个项目的迭代器 a* 是可迭代的解包运算符。

如果您要对每个元素应用的操作比较复杂,则此方法特别有用。除了创建匿名函数(通过 lambda),您还可以预先定义一个函数,名称为 foo,然后插入 foo 作为第一个参数。

对于这么简单的操作,你最好直接做(@SomethingSomething 最先建议的)

A = [i - 1 for i in A]

计时

In [5]: %%timeit
   ...: a = [5, 6, 7, 11]
   ...: for i in range(len(a)):
   ...:     a[i] -= 1
   ...: 
327 ns ± 2.9 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

In [6]: %%timeit
   ...: a = [5, 6, 7, 11]
   ...: a = [*map(lambda x: x - 1, a)]
   ...: 
   ...: 
323 ns ± 1.31 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

In [7]: %%timeit
   ...: a = [5, 6, 7, 11]
   ...: a = [i - 1 for i in a]
   ...: 
   ...: 
233 ns ± 1.31 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

您可以遍历列表并将每个数字的值减 1。

A = [5, 6, 7, 11]

#original
print(A)

for i in range(len(A)):
    A[i] -= 1

#changed
print(A)