执行顺序意外影响结果

时间:2018-08-19 06:50:11

标签: python operator-precedence

我正在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#1 交换 line#2时,结果类似于先前的结果:

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

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

1 个答案:

答案 0 :(得分:0)

之所以会这样,是因为result=zip(numberList, strList)返回了迭代器。它类似于itertools.izip在python 2.x中所做的 先前在python 2 zip中用于返回元组。

从python 3 zip返回一个迭代器。迭代器仅返回一次值。当第二次尝试对其进行迭代时,则没有任何输出。

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

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)