从字符串列表中删除子字符串

发布于 2021-01-29 18:22:14

我有一个清单

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)

但它似乎不起作用。我读过,我们无法在列表上进行迭代时将其删除。因此,副本res,而这l是我的原始列表。

关注者
0
被浏览
142
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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’]

    通过对列表进行排序,我们可以稍微加快速度

    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:])]
    

    正如@AshwiniChaudhary在评论中提到的那样,如果要保留重复的字符串,则可以执行此操作

    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']
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看