意外影响结果的执行顺序



我在Python3 shell上运行这段代码。

numberList = [1, 2, 3]
strList = ['one', 'two', 'three']
result=zip(numberList, strList)
resultSet=set(result)   #1
resultList=list(result)  #2
print(resultSet)
print(resultList)

我对结果感到非常惊讶:

{(1, 'one'), (3, 'three'), (2, 'two')}
[]            <<< Why?

此外,当我line#1line#2交换时,结果与前面的结果相似:

set()         <<< Why? 
[(1, 'one'), (2, 'two'), (3, 'three')]

后来一个空的背后可能是什么原因? 我在这里错过了任何概念吗?仅供参考,我对Python相对较新。

发生这种情况是因为result=zip(numberList, strList)返回一个迭代器。它类似于itertools.izip在python 2.x中所做的。 以前在python 2中zip用于返回元组。

从 python 3zip返回一个迭代器。迭代器只返回一次值。当第二次尝试迭代它时,则不会给出任何输出。

如果您需要再次使用它,您应该考虑将其用作

numberList = [1, 2, 3]
strList = ['one', 'two', 'three']
result=list(zip(numberList, strList)) # check the "list" keyword added 

resultList=list(result)  #2
resultSet=set(result)   #1
print(resultSet)
print(resultList)

最新更新