我似乎在Python中发现了一个奇怪的bug,我不知道它是否已经存在,或者我正在做的是什么错误的事情。请解释一下。你知道吗
我们知道可以用python压缩两个列表,将它们组合成元组。我们可以很容易地再次解析它们。当我多次尝试解析同一个zipped变量时,Python似乎没有这样做,它最终给出了空列表[]。第一次它会这样做,但不止一次它不会。你知道吗
示例:
lis1=[1,2,3,4,5]
lis2=['a','b','a','b','a']
zip_variable=zip(lis1,lis2)
op1=[val2 for (val1,val2) in zip_variable if val1<4]
op2=[val1 for (val1,val2) in zip_variable if val2=='a']
op3=[val1 for (val1,val2) in zip_variable if val2=='b']
print(op1,"\n",op2,"\n",op3)
输出:
['a','b','a']
[]
[]
我有一个解决方案,就是为同一个zip文件创建多个变量,如下所示:
lis1=[1,2,3,4,5]
lis2=['a','b','a','b','a']
zip_variable1=zip(lis1,lis2)
zip_variable2=zip(lis1,lis2)
zip_variable3=zip(lis1,lis2)
op1=[val2 for (val1,val2) in zip_variable1 if val1<4]
op2=[val1 for (val1,val2) in zip_variable2 if val2=='a']
op3=[val1 for (val1,val2) in zip_variable3 if val2=='b']
print(op1,"\n",op2,"\n",op3)
输出:
['a','b','a']
[1,3,5]
[2,4]
如果我们不在乎记忆,解决方法总是可能的。你知道吗
但主要的问题是为什么会发生这种情况?你知道吗
zip()
返回Python3中的迭代器。根据需要,它一次只从源iterables生成一个元组,当这些元组被迭代时,zip()
就没有什么可产生的了。这种方法减少了内存需求,还可以提高性能(特别是在您实际上从未请求过所有压缩元组的情况下)。你知道吗如果您再次需要相同的序列,可以再次调用
zip()
,或者将zip()
转换为类似list(zip(...))
的列表。你知道吗您还可以使用^{} 来创建
zip()
迭代器的“副本”。但是,在幕后,它存储所有迭代器都没有请求的任何项。如果你要这么做,不妨先用一个列表开始。你知道吗因为zip函数返回一个iterator。 这种对象只能迭代一次。你知道吗
如果您想对同一个zip进行多次迭代,我建议您从中创建一个列表或元组(
list(zip(a, b))
或tuple(zip(a, b))
)相关问题 更多 >
编程相关推荐