Python:获取其他列表中没有项目的新列表

时间:2015-03-24 01:26:14

标签: python python-2.7

我想在主列表中创建一个新列表,除了其他列表中的元素

下面如何在python 2.7中进行操作。有没有快速内置功能呢?

  Input (Mainlist) :[['P', ['not', 'R']], [['not', 'Q'], ['not', 'R'], 'P']]
  Input (Otherlist) : ['P', ['not', 'R']] 

  Output (NewlistIwant) : [['not', 'Q']]

即主要列表中的所有内容,除了两个项目' P'和[' not'' R']

3 个答案:

答案 0 :(得分:1)

如果我理解你,你有一个列表列表,每个列表都有一些字符串和列表的组合。您想要删除内容列表中另一个列表中的所有内容。

以下代码适用于我。

>>> mainlist = [['P', ['not', 'R']], [['not', 'Q'], ['not', 'R'], 'P']]
>>> otherlist = ['P', ['not', 'R']]
>>> def filter_list():
        newlist = []
        for list_ in mainlist:
            for item in list_:
                if item not in otherlist:
                    newlist.append(item)
        return newlist

>>> filter_list()
[['not', 'Q']]

请注意,这不安全 - 如果你改变旧列表,你就会搞砸新列表。

>>> a = filter_list()
>>> mainlist[1][0][1] = 'L'
>>> a
[['not', 'L']]

目前还不清楚你是否想要这种行为。

答案 1 :(得分:0)

您可以使用列表理解:

[element for element in MainList if element not in OtherList]

答案 2 :(得分:0)

在下面使用:

def getRemainingLiterals(prop):

    remainingList = []

    for item in prop:
        if isinstance(item, list): #list                    
            for literal1 in item:
                if literal1 not in deletedList:
                    remainingList.append(literal1)

        else:  #str
            if item not in deletedList :
                remainingList.append(item) 

    return remainingList