2014-07-18 50 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

相关问题