Python - 修改for循环变量
Python - Modify for-loop variable
我有这个功能:
numbers = [3, 4, 6, 7]
for x in numbers:
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
它到底做什么并不重要,只有 x 是相关的。
我想修改 x 以便:
for x in numbers:
a = 5 - (x + 2)
b = 5 + (x + 2)
c = 5 * (x + 2)
print((x + 2), a, b, c)
但显然到处添加 + 2
很烦人,所以我只想为 x
添加另一个值。
当然,我可以像这样创建另一个变量:
for x in numbers:
modifiedX = x + 2
a = 5 - modifiedX
b = 5 + modifiedX
c = 5 * modifiedX
print(modifiedX, a, b, c)
但我很好奇是否可以在不添加另一行的情况下获得相同的结果,例如:
for x + 2 in numbers:
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
或者这个:
x + 2 for x in numbers:
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
最后 2 个代码块不正确 Python 语法,所以我很好奇:是否有正确的方法可以在不添加更多行的情况下修改 x
版本?
注意:我还是想保留原来的号码列表,所以我不打算直接更改列表中的号码。
您可以使用 map()
生成一个新的迭代器,其中包含 numbers
的元素递增 2。由于 map()
创建了一个新的迭代器,因此不会修改原始列表:
numbers = [3, 4, 6, 7]
for x in map(lambda x: x + 2, numbers):
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
这输出:
5 0 10 25
6 -1 11 30
8 -3 13 40
9 -4 14 45
如果你想要一个简短的答案,这也适用:
numbers = [3, 4, 6, 7]
[print(x, 5-x, 5+x, 5*x) for x in map(lambda x: x + 2, numbers)]
输出:
5 0 10 25
6 -1 11 30
8 -3 13 40
9 -4 14 45
列表理解可以工作
for x in [y+2 for y in numbers]:
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
对 x
所做的事情可以包装到一个函数中。此函数将执行对 x 执行的一系列操作并打印结果。
def do_things(x):
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
然后你可以遍历定义的值并在 x 不变的情况下调用函数
numbers = [3, 4, 6, 7]
for x in numbers:
do_things(x)
3 2 8 15
4 1 9 20
6 -1 11 30
7 -2 12 35
或者您可以在调用函数时修改 x 的值:
for x in numbers:
do_things(x+2)
5 0 10 25
6 -1 11 30
8 -3 13 40
9 -4 14 45
我有这个功能:
numbers = [3, 4, 6, 7]
for x in numbers:
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
它到底做什么并不重要,只有 x 是相关的。
我想修改 x 以便:
for x in numbers:
a = 5 - (x + 2)
b = 5 + (x + 2)
c = 5 * (x + 2)
print((x + 2), a, b, c)
但显然到处添加 + 2
很烦人,所以我只想为 x
添加另一个值。
当然,我可以像这样创建另一个变量:
for x in numbers:
modifiedX = x + 2
a = 5 - modifiedX
b = 5 + modifiedX
c = 5 * modifiedX
print(modifiedX, a, b, c)
但我很好奇是否可以在不添加另一行的情况下获得相同的结果,例如:
for x + 2 in numbers:
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
或者这个:
x + 2 for x in numbers:
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
最后 2 个代码块不正确 Python 语法,所以我很好奇:是否有正确的方法可以在不添加更多行的情况下修改 x
版本?
注意:我还是想保留原来的号码列表,所以我不打算直接更改列表中的号码。
您可以使用 map()
生成一个新的迭代器,其中包含 numbers
的元素递增 2。由于 map()
创建了一个新的迭代器,因此不会修改原始列表:
numbers = [3, 4, 6, 7]
for x in map(lambda x: x + 2, numbers):
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
这输出:
5 0 10 25
6 -1 11 30
8 -3 13 40
9 -4 14 45
如果你想要一个简短的答案,这也适用:
numbers = [3, 4, 6, 7]
[print(x, 5-x, 5+x, 5*x) for x in map(lambda x: x + 2, numbers)]
输出:
5 0 10 25
6 -1 11 30
8 -3 13 40
9 -4 14 45
列表理解可以工作
for x in [y+2 for y in numbers]:
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
对 x
所做的事情可以包装到一个函数中。此函数将执行对 x 执行的一系列操作并打印结果。
def do_things(x):
a = 5 - x
b = 5 + x
c = 5 * x
print(x, a, b, c)
然后你可以遍历定义的值并在 x 不变的情况下调用函数
numbers = [3, 4, 6, 7]
for x in numbers:
do_things(x)
3 2 8 15
4 1 9 20
6 -1 11 30
7 -2 12 35
或者您可以在调用函数时修改 x 的值:
for x in numbers:
do_things(x+2)
5 0 10 25
6 -1 11 30
8 -3 13 40
9 -4 14 45