2014-07-18 93 views
-1

鑑於這種段存在 -隔離2D陣列唯一列表中不另一個

for e, m in enumerate(mfilist): 
    if not any(m[0] and m[1] and m[2] and m[3] and m[4] in sublist for sublist in internaltbl): 
     goodlist.append(m) 
     copygood.append(copylist[e]) 

幾個列表應該被附加到goodlist,因爲它們不具有存在於與上述過濾組合元素internaltbl重複。

例如,這裏是在mfilist一個條目:

[u'{8E25CEF3-4098-4148-9122-E9978DCB077D}', u'{889280F1-8F0B-48E8-A8D2-FCA44BA3D492}', u'{1A290F5B-CB24-4E5B-8342-B6B256150D1F}', 2, 'C', '', datetime.datetime(2014, 7, 14, 0, 0), '', '', '', 'FALSE', 'A1', 'Map'] 

,一個來自internaltbl:

[u'Historical', u'{03810429-88FD-4ACD-A8EE-1A6E21250B94}', u'{4FBB1469-1C0D-4DBE-9C98-CFECA12748C3}', u'{ED96E80A-A20F-4DEA-92A6-2DF783C7665F}', 2, u'C', u'PPR, u'ArcMap Document (*.mxd)', u'L', datetime.datetime(2014, 5, 1, 0, 0), u'LG', u'CHJ', u'TB', None, u'Proposed'] 

因爲我已經確信每一個元素是字符串值,以避免「強制轉換爲Unicode '問題或諸如此類,但問題依然存在 - 沒有任何附加條件。

這些GUIDS沒有組合,那麼在internaltbl中存在「2,C」。

想法?

回答

-1

您遇到了運算符優先級問題。在該位:

m[0] and m[1] and m[2] and m[3] and m[4] in sublist 

要評價這是什麼:

(m[0] in sublist) and (m[1] in sublist) and ... 

但是Python看到是這樣的:

m[0] and m[1] and m[2] and m[3] and (m[4] in sublist) 

由於非空字符串鴨類型當然,只要m [4]在子列表中,並且所有其他字符串都是非空的,結果就是True。

如果你不想分開來寫每個成員測試,這是一條捷徑:

all(x in sublist for x in [m[1], m[2], m[3], m[4]]) 
+0

我引用您的實例進行線上2。在我的例子中,我錯過了m [0],但解決方案的原理仍然有效。你明白你錯誤的要點嗎? – whereswalden

+0

感謝您的幫助。 longform工作,但我沒有設法正確實施你的捷徑。我嘗試了所有方法((在[m [1],m [2],m [3],m [4]]中的x的子列表中的x對於internaltbl中的子列表)。無論如何,誰低估了我們的衝動?你的唯一答案是有效的! – Sleep6

相關問題