为什么我不能为下面的代码输入for循环以及int(num)和map(int,str(num))之间的差异

时间:2018-03-06 01:28:14

标签: python

为什么我无法进入以下代码的for循环

def maximumSwap(num):
    A = map(int, str(num))
    last = {x: i for i, x in enumerate(A)}
    for i, x in enumerate(A):
        print(i, x)
        for d in range(9, x, -1):
            if last.get(d, None) > i:
                A[i], A[last[d]] = A[last[d]], A[i]
                return int("".join(map(str, A)))
    return num

我能够打印最后一个但无法进入for循环。我还想知道int(num)map(int, str(num))

之间的区别

1 个答案:

答案 0 :(得分:2)

A是一个迭代器,你不能运行两次相同的迭代器。例如,请参阅http://stackoverflow.com/questions/3266180/ ...

如果确实需要循环数据两次,则必须重新创建迭代器或按顺序存储数据,可能是list

方法1:

last = {x: i for i, x in enumerate(map(int, str(num)))}
for i, x in enumerate(map(int, str(num))):

方法2:

A = list(map(int, str(num)))
last = {x: i for i, x in enumerate(A)}
for i, x in enumerate(A):