use*_*724 2 python substring list
我有一个list l=['abc','abcdef','def','defdef','polopolo']
即时消息试图删除其超级字符串已经在列表中的字符串。在这种情况下,结果应为:
['abcdef','defdef','polopolo']
我已经写了代码:
l=['abc','abcdef','def','defdef','polopolo']
res=['abc','abcdef','def','defdef','polopolo']
for each in l:
l1=[x for x in l if x!=each]
for other in l1:
if each in other:
res.remove(each)
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。我读过,我们无法在列表上进行迭代时将其删除。因此,副本res。,而l是我的原始列表。提前致谢。
l=['abc','abcdef','def','defdef','polopolo']
print [j for i, j in enumerate(l) if all(j not in k for k in l[i + 1:])]
# ['abcdef', 'defdef', 'polopolo']
Run Code Online (Sandbox Code Playgroud)
通过对列表进行排序,我们可以稍微加快速度
l = sorted(l, key = len)
print [j for i, j in enumerate(l) if all(j not in k for k in l[i + 1:])]
Run Code Online (Sandbox Code Playgroud)
正如@Ashwini Chaudhary在评论中提到的那样,如果要保留重复的字符串,则可以执行此操作
l = ['abc','defghi' 'abcdef','def','defdef','defdef', 'polopolo']
l = sorted(l, key = len)
print [j for i,j in enumerate(l) if all(j == k or (j not in k) for k in l[i+1:])]
# ['defdef', 'defdef', 'polopolo', 'defghiabcdef']
Run Code Online (Sandbox Code Playgroud)