我在使用list()
时观察到一个顺序依赖,我不明白。我从一个zipmytup
开始,测试了3个版本的代码,结果如下。df_q
是常规数据帧:
#ver1
df_q.loc[list(mytup)] # first access works fine
df_q.loc[list(mytup)] # TypeError: Cannot infer number of levels from empty list
#ver2
list(mytup)
df_q.loc[mytup] # TypeError: object of type 'zip' has no len()
df_q.loc[mytup]
#ver3 works as excepted
mylist = list(mytup)
df_q.loc[mylist]
df_q.loc[mylist]
对我来说,因为我只在ver1
中的第二个调用中得到了一个错误,我最初认为list()
有一些未记录的就地行为,但显然不是这样,因为ver2
不起作用。ver3
按预期工作,但我不明白1/2中发生了什么。你知道吗
问题是
zip
返回一个zip对象,它是一个迭代器。大多数表现良好的迭代器都是单过程的:换句话说:
因此,如果您想重用zipped值,您需要保留对物化列表的引用,就像您在第三次尝试中所做的那样。你知道吗
要清楚的是,这并不是特定于
list
函数的,而是针对在zip对象上迭代的任何对象:相关问题 更多 >
编程相关推荐