for i in reversed(range(10)):
for j in reversed(range(10)):
print(i, j)
我想使用变量更改此python代码。
r = reversed(range(10))
for i in r:
for j in r:
print(i, j)
r1 = reversed(range(10))
r2 = reversed(range(10))
for i in r1:
for j in r2:
print(i, j)
但是,以上两个for循环都将i
修复为9。
为什么会出现此问题以及如何解决?
答案 0 :(得分:4)
reversed
生成迭代器,并且只能在耗尽之前迭代一次。你的内部循环尝试不止一次迭代r2
,所以即使i
经历了9到0,内部循环也只能产生一次实际数字。
在你的循环j
内重新创建迭代器:
r1 = reversed(range(10))
for i in r1:
r2 = reversed(range(10))
for j in r2:
print(i, j)
或首先创建一个列表副本,可以多次迭代:
r1 = reversed(range(10))
r2 = reversed(range(10))
r2_copy = list(r2)
for i in r1:
for j in r2_copy:
print(i, j)
更好的选择是使用itertools.product()
function:
from itertools import product
r1 = reversed(range(10))
r2 = reversed(range(10))
for i, j in product(r1, r2):
print(i, j)
product()
根据需要创建内部副本。
答案 1 :(得分:0)
您可以尝试其他方式来反转列表(因为reversed
返回生成器 - 所以您只需迭代一次):
r = range(10)[::-1]
for i in r:
for j in r:
print(i, j)
range(10)
会返回一个列表,因此您可以使用slice
[::-1]
来回复该列表