根据另一个列表从子列表中删除元素

时间:2020-01-06 19:59:50

标签: python

我有一个用子列表填充的列表:

a = [['12345/0111','57894/0311','45698/2333'],['12345/0600','87456/1234']]

然后我还有另一个列表:

b = ['0111','0600','0311']

我想删除列表 a 中的所有元素,其中不包含列表 b 中的元素。 我认为 b 中的firts元素应该是这样的(在本例中为45698/2333和87456/1234):

for x in a:
    for y in x:
        if b[0] not in y:
            x.remove(y)

但是它甚至对于第一个元素都无效,而且我真的不知道如何对 b 中的所有元素执行此操作。

编辑:很抱歉,我没有在输出中指定需要相同的嵌套列表结构。

2 个答案:

答案 0 :(得分:1)

尝试一下:

# create a new list to store values
c = []

for x in a:
   for y in x:
      if str.split(y, '/')[1] in b:
         c.append(y)

我的结果:

a
[['12345/0111', '57894/0311', '45698/2333'], ['12345/0600', '87456/1234']]
b
['0111', '0600', '0311']
c = []
for x in a:
    for y in x:
       if str.split(y, '/')[1] in b:
          c.append(y)

c
['12345/0111', '57894/0311', '12345/0600']

在澄清后进行编辑:

for x in a:
  for y in x:
    if str.split(y, '/')[1] in b:
      x.remove(y)

编辑结果:

for x in a:
   for y in x:
     if str.split(y, '/')[1] in b:
       x.remove(y)

a
[['57894/0311', '45698/2333'], ['87456/1234']]

答案 1 :(得分:1)

您是说要删除b中的所有内容,但这似乎并不是您的意思。无论如何,如果您从以下两个样本中的任何一个中删除“ not”,它们都会为您提供b中的样本。

a = [['12345/0111','57894/0311','45698/2333'],['12345/0600','87456/1234']]
b = ['0111','0600','0311']

未嵌套

output = []
for l in a:
    for e in l:
        if not any([x in e for x in b]):
            output.append(e)

嵌套

output = []
for l in a:
    output.append([x for x in l if not any(z in x for z in b)])