我有一个包含元组[(a,b,c,1),(e,a,a,0),etc.]
的列表,其中每个元组由三个字符串和一个整数组成。每个值都存储在unicode中,即(u'a',u'b',u'c',1)
。
我的列表包含98个唯一元组。其中3个如下:
tuple[2] == "SUPPLEMENTARY PLUMPY",
即:
(u'FRANCE', u'ROUEN (FRANCE)', u'SUPPLEMENTARY PLUMPY', 0)
(u'INDIA', u'MUMBAI (INDIA)', u'SUPPLEMENTARY PLUMPY', 0)
(u'PAKISTAN', u'KARACHI (PAKISTAN)', u'SUPPLEMENTARY PLUMPY', 0)
当我迭代列表而没有按如下方式排序时:
for tuple in data:
if tuple[2] == "SUPPLEMENTARY PLUMPY":
print tuple
只打印了1个元组:
(u'INDIA', u'MUMBAI (INDIA)', u'SUPPLEMENTARY PLUMPY', 0)
当我在排序时迭代列表,如下所示:
for tuple in sorted(data):
if tuple[2] == "SUPPLEMENTARY PLUMPY":
print tuple
打印所有3个元组!
在98个唯一值中,当我不对列表进行排序时会迭代94个,如果我遍历排序列表,则覆盖所有98个值。这让我发疯了。
我尝试在最小的工作示例中复制行为,但问题没有出现......问题出现的代码是巨大的,遗憾的是无法共享,所以我的描述详细如下我希望能激发一些想法!
你们能帮我解决这个问题吗?有没有猜到为什么会发生这种情况?
提前谢谢你, 柯恩
答案 0 :(得分:1)
由于您还没有发布问题所在的实际代码,因此除了闲置,无知的推测外,我们所能做的事情很少。
我的闲散,无知的猜测是这样的:你在代码中的某个地方改变了你没有向我们展示过的代码,同时也在迭代它。通过在列表周围添加sorted()
,您实际上是在制作列表的副本,因此只有原始列表会随时更改,而不是您正在迭代的副本。