2016-12-05 44 views
0

我有一個元組列表[(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) 

當我迭代o同時排序如下:

for tuple in sorted(data): 
    if tuple[2] == "SUPPLEMENTARY PLUMPY": 
     print tuple 

所有3元組都打印出來!

在我不排序列表時,迭代了94個唯一值,並且如果遍歷排序列表,所有98都被覆蓋。這讓我瘋狂。

我試圖在最小工作示例中複製行爲,但問題沒有出現......問題確實出現的代碼非常龐大,可悲的是無法共享,因此我詳細描述了其描述我希望能引發一些想法!

你們能幫我弄清楚這個嗎?任何猜測爲什麼發生這種情況?

謝謝你在前進, 公園

+0

排序'data'只重新排列列表中的元組(不是元組內的元素),所以'如果tuple [2] =='測試不應該受到排序影響 –

+0

你是如何發現只有當不對列表進行排序時,94個迭代而不是98個? – Skycc

+0

@Skycc我正在將元組導出到Excel中,並將它們用於多個分析 –

回答

1

既然你不貼實際的代碼問題出在哪裏,有很少能做到超越閒置,炒一無所知。

我的空閒,無知的猜測是這樣的:你在代碼中改變列表的某處,你沒有向我們展示,在迭代它的同時。通過在列表的周圍添加sorted(),您可以有效地創建列表的副本,因此只有原始列表正在被更改,而不是您正在迭代的副本。

+0

謝謝@bobince,I確實在某些條件下從列表中刪除了一些元組 - 我不知道這會影響上述列表的迭代! –