求指导:这里为什么只迭代一次,但是将zip对象z转换为list就可以正常迭代?

count = 0
s = ''
lst1 = ['1','2','3']
lst2 = ['a','b','c']
z = zip(lst1, lst2)
for a, b in z:

s += a + b
if count < len(list(z)):
s += '\n'
count += 1
print(s)

建议将问题用代码片缩一下,不然不知道你在哪里缩进了。如果你的程序是这样的:

count = 0
s = ''
lst1 = ['1','2','3']
lst2 = ['a','b','c']
z = zip(lst1, lst2)
for a, b in z:
    s += a + b
if count < len(list(z)):
    s += '\n'
    count += 1
print(s)

最后的输出应该是:1a2b3c 。

zip对象转为list,结果是[],所以len(ist(z))为0,没有执行if语句内的内容。if语句判断成功也只能执行一次,应改为while更合理。下面是我改写的代码,你看下是不是你想要的结果。

count = 0
s = ""
lst1 = ['1','2','3']
lst2 = ['a','b','c']
z = dict(zip(lst1, lst2))

for key, value in z.items():
    s += key + value

while count < len(list(z)):
    s += '\n'
    count += 1

print(s)

因为这段代码在运行中出错,导致迭代终止。list(z)导致出错

你想表达的代码应该是这样的吧?

count = 0
s = ''
lst1 = ['1','2','3']
lst2 = ['a','b','c']
z = zip(lst1, lst2)
for a, b in z:
    s += a + b
    if count < len(list(z)):
        s += '\n'
        count += 1
print(s)

原因:对象z是一个迭代器,当python解释器执行到len(list(z))的时候,已经将z内的数据全部遍历一次,这个时候,z已经空了,下一次for循环,对象z空了,len(list(z))为0,且对象z读不出来任何数据。

PS:对于同一个迭代器(栗子:你代码中的z),只能遍历一次,然后迭代器就空了,取不出来任何东西了。

有哪个地方不懂的可以加我QQ:526772254

望采纳