2015-11-07 44 views
0

我有排除项目从名单列表的Python

testList = [] 

testList.append([0,-10]) 
testList.append([-12,122]) 
testList.append([13,172]) 
testList.append([17,296]) 
testList.append([-10,80]) 
testList.append([-16,230]) 
testList.append([-18, 296]) 
testList.append([-2, -8]) 
testList.append([-5,10]) 
testList.append([2,-4]) 

下一个列表,其中包含从以前的列表中的元素另一个列表:

m1 = [] 
m1.append([0, -10]) 
m1.append([13, 172]) 

然后我尝试从列表中得到一个子阵testList下一个语句:

[element for i, element in enumerate(testList) if i not in m1] 

,但我得到了相同的列表为testList

我该如何做到这一点?

+1

'[元素我,在枚举元素(testList)如果元素不是M1]' – Kamejoin

+0

非常感谢!工作非常好! –

+2

这是不必要的复杂。 –

回答

2

问题在于你使用枚举。我只是一个整数,因此永远不会列入只有列表的列表中。试试这个:

[element for element in testList if element not in m1] 
+0

使用集skrrgwasme建议更有效,因为他们使用散列在引擎盖下。然而,你需要你的元素是元组而不是列表,因为列表是不可散列的(我会评论他的回答,但我缺乏这样做的声望)。 –

1

试试这个:

def clean_list(my_list, exclusion_list): 

    new_list = [] 
    for i in my_list: 
     if i in exclusion_list: 
      continue 
     else: 
      new_list.append(i) 

    return new_list 
+0

这应该起作用,但它不必要的冗长。这种类型的操作就是[list comprehensions](http://www.secnetix.de/olli/Python/list_comprehensions.hawk)。 – skrrgwasme

1

如果你不关心列表的顺序,您可以使用sets代替:

# result will be a set, not a list 
not_in_testlist = set(testlist) - set(m1) 

如果你想结果再次列表:

# result will be a list with a new order 
not_in_m1 = list(set(testlist) - set(m1)) 

请注意,使用集合将失去原始列表的顺序,因为集合是无序类型(它们在引擎盖下使用散列)。

如果你需要保存的顺序,则Andrew Allaire的答案是正确的:

# result is a list, order is preserved 
not_in_testlist = [e for e in testlist if e not in m1]