根据另一个列表的内容从一个列表中删除项目

时间:2019-01-11 09:49:35

标签: python python-3.x list tuples

我正在尝试从一个列表中删除所有列表中的所有实体。

列表之一是列表的列表。

另一个是元组列表

ScoutNameList = [[('Rory', 'Adair')], [('Fiona', 'Adair')]]
ScoutNamedFromPatrol = [('Rory', 'Adair'), ('Fiona', 'Adair'), ('Ruariri', 'OBrien')]
ScoutNamedFromPatrol.remove(ScoutNameList)

预期结果

ScoutNamedFromPatrol=[('Ruariri', 'OBrien')]

实际结果

ScoutNamed=[('Rory', 'Adair'), ('Fiona', 'Adair'), ('Ruariri', 'OBrien')]

5 个答案:

答案 0 :(得分:2)

>>> for l in ScoutNameList:
    ScoutNamedFromPatrol.remove(l[0])
>>> ScoutNamedFromPatrol
[('Ruariri', 'OBrien')]

答案 1 :(得分:1)

您可以使用列表推导-

ScoutNamedFromPatrol = [s for s in ScoutNamedFromPatrol if [s] not in ScoutNameList]

答案 2 :(得分:1)

您可以使用列表推导。但是,请注意,您必须将ScoutNameList展平,可以使用itertools.chain来做到这一点:

[i for i in ScoutNamedFromPatrol if i not in chain(*ScoutNameList)]
#[('Ruariri', 'OBrien')]

位置:

list(chain(*ScoutNameList))
#[('Rory', 'Adair'), ('Fiona', 'Adair')]

答案 3 :(得分:1)

如果顺序不重要,则可以使用set.difference或其语法糖p1 + geom_text(data = mtcars %>% select(carName, wt) %>% mutate(x = 3, y = scale(wt)), aes(x = x, y = y, label = carName), hjust = -0.1, inherit.aes = FALSE) p2 + geom_text_repel(data = . %>% filter(variable == "wt"), aes(x = variable, y = value, label = carName), xlim = c(2, NA)) p3 + geom_text(data = . %>% filter(variable == "wt"), hjust = -0.1) p4 + geom_text_repel(data = . %>% filter(variable == "wt"), xlim = c(2, NA)) 。由于-是嵌套的,每个子列表都包含一个项目,因此您可以将operator.itemgettermap结合使用来构造可迭代的标量。

ScoutNameList

@TrebuchetMS建议的一种更少的functional替代方案:

from operator import itemgetter

res = list(set(ScoutNamedFromPatrol) - set(map(itemgetter(0), ScoutNameList)))
# [('Ruariri', 'OBrien')]

适应性强的版本可以处理res = list(set(ScoutNamedFromPatrol) - set(x[0] for x in ScoutNameList)) 内部列表中的多个项目:

ScoutNameList

答案 4 :(得分:0)

尝试

ScoutNameList = [[('Rory', 'Adair')], [('Fiona', 'Adair')]]
ScoutNamedFromPatrol = [('Rory', 'Adair'), ('Fiona', 'Adair'), ('Ruariri', 'OBrien')]
for x in ScoutNameList:
    for y in x:
        if y in ScoutNamedFromPatrol:

            ScoutNamedFromPatrol.remove(y)

print(ScoutNamedFromPatrol)