我有一个用子列表填充的列表:
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中的所有元素执行此操作。
编辑:很抱歉,我没有指定输出中需要具有相同的嵌套列表结构。
尝试一下:
# 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']]
您是说要删除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)])