初使用python3的一点坑

python3 的语法和python2基本一致,切换非常容易,不过一些细节的差异可能带来很坑的后果。最近碰到的一个情况就是 zip 在 python2 和 python3 中行为的差别造成的。

在python2中,zip函数会合并两个列表,返回一个合并后的列表。但是在python3中zip的返回对象变成了一个迭代对象。这样当我们用zip来生成数组的时候就会导致意想不到的结果。一个简单的例子

a = [1, 2, 3, 4]
b = ['a', 'b', 'c', 'd']
mydic = dict(zip(a, b))

在Python2中生成的字典是 {1:’a’, 2:’b’, 3:’c’, 4:’d’}

但是在python3中,因为zip返回的是一个迭代对象而不是列表,得到的将会是一个空数组!

正确的做法是需要强制将迭代对象转换成列表

mydic = dict(list(zip(a, b)))

这种函数行为的变化也许能节约一些内存,但是也增加了代码出错的可能性。

Visits: 422

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

*