迭代排序列表,返回的条目多于迭代非排序列表

时间:2016-12-05 10:51:13

标签: python python-2.7 list sorting unicode

我有一个包含元组[(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个值。这让我发疯了。

我尝试在最小的工作示例中复制行为,但问题没有出现......问题出现的代码是巨大的,遗憾的是无法共享,所以我的描述详细如下我希望能激发一些想法!

你们能帮我解决这个问题吗?有没有猜到为什么会发生这种情况?

提前谢谢你, 柯恩

1 个答案:

答案 0 :(得分:1)

由于您还没有发布问题所在的实际代码,因此除了闲置,无知的推测外,我们所能做的事情很少。

我的闲散,无知的猜测是这样的:你在代码中的某个地方改变了你没有向我们展示过的代码,同时也在迭代它。通过在列表周围添加sorted(),您实际上是在制作列表的副本,因此只有原始列表会随时更改,而不是您正在迭代的副本。