我正在尝试从一个列表中删除所有列表中的所有实体。
列表之一是列表的列表。
另一个是元组列表。
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')]
答案 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.itemgetter
与map
结合使用来构造可迭代的标量。
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)