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)
我有一个列表,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)