为了账号安全,请及时绑定邮箱和手机立即绑定

TypeError: zip argument #1 must support iteration

老师,就是输入两个zip出问题了是怎么回事哦

正在回答

4 回答

zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)

http://www.cnblogs.com/strongYaYa/p/5870075.html

0 回复 有任何疑惑可以回复我~

按照你们的方法,我的代码成功实现了,但原理还是迷迷糊糊的

0 回复 有任何疑惑可以回复我~

我也是一样的问题,这个问题的意思是zip()引用的东西不是一个可迭代类型,很奇怪,因为这个内容确实是可迭代类型。所以我做了如下修改:

Y1 = zip(x,y1)

Y2 = zip(x,y2)

for x,y in Y1:

    plt.text(x+0.4, y+0.05, '%.2f'%y, ha='center', va='bottom')

for x, y in Y2:

    plt.text(x+0.4, -y-0.05, '%.2f'%y, ha='center', va='top')

其实就是把变量换了一下再代入,结果就可行了。

可是这个样子和原来的代码没有本质不同啊,很纳闷,网上也没找见答案。


1 回复 有任何疑惑可以回复我~
#1

慕运维5351845

我的理解:zip函数的参数是序列,不能是一个值。for x,y in zip(x,y1)时,x变成一个值了而不是序列,所以报错了
2018-05-21 回复 有任何疑惑可以回复我~
#2

TwistFater 回复 慕运维5351845

是这样的,在第一个for plt.text结束处下个断点可以发现第一个循环运行完之后,x变成了x列表中最后一个值,已经将原来的x列表替代了,所以再次zip(x, y2)就会因为x不是列表出错.相比起来,可以def一个函数来解决,因为函数运行完可以将x,y释放掉不会改变原列表的值.
2018-06-27 回复 有任何疑惑可以回复我~
#3

qq_慕瓜3114566

其实就是因为x变量x的命名冲突引起的。x本来是一可迭代对象,因为第一次for循环中,x被重新赋值,已经不原来的向量x
2020-05-20 回复 有任何疑惑可以回复我~

怎么解决的,我也出现这个问题

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

TypeError: zip argument #1 must support iteration

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信