python - 如何从列表中删除项目中存在部分匹配项的项目

标签 python list

如果我有一个列表,其中包含与列表中其他项目部分匹配的项目,如下所示,其中 'bob''bob1' 内的部分匹配'bob2',我想删除这些部分匹配的项目 ('bob1', 'bob2', '彼得2') 例如我想从这里开始:

lst = ['bob', 'bob1', 'bob2', 'peter', 'peter2']`

对此:

lst = ['bob', 'peter']

我有这个有效的方法,但我想知道是否有更干净的方法?

lst = ['bob', 'bob1', 'bob2', 'peter', 'peter2']

removeIndices = []
for i, itemi in enumerate(lst):
    for j, itemj in enumerate(lst):
        if itemi in itemj and itemi != itemj:
            removeIndices.append(j)

for i in sorted(removeIndices, reverse=True):
    del lst[i]

最佳答案

您可以将 all() 与累积结果的列表一起使用:

result = []

for item in lst:
    if all(substr not in item for substr in result):
        result.append(item)

输出:

['bob', 'peter']

与您现有的方法相比,这有两个优点:

  1. 无需在原始列表上重复调用del。如果您想保留原始列表,也可以。 (重复调用del也很慢。)
  2. for 循环不是必需的。 (在我看来)这种语法更清晰、更直观。

关于python - 如何从列表中删除项目中存在部分匹配项的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72107751/

相关文章:

javascript - 使用 HKDF key 的 Crypto-js 加密和 Python 解密

python - Python中while循环的执行问题

python - Meld 需要 pygtk 2.8.0 或更高版本

python - 如何按索引顺序展平列表矩阵(列表列表)?

python - ast.literal_eval - 遍历列表中的字符串元素

python - Pandas :保存数据框以打开工作簿

python - 将 try except block 与 python 代码合并

list - 在序言中列出连续对

c# - C# 中是否有 List<T> 的方法,例如在 c++ 中为 vector<T> 调整大小

c# - 将列表拆分为字母范围