我有一个清单
a = ['find old', 'find old mails', 'finding', 'find your pc', 'find your pc s ip', 'find your pc s ip address']我想从列表中删除子集字符串,结果如下所示
['find old mails', 'finding', 'find your pc s ip address'] 测试代码
a = ['find old', 'find old mails', 'finding', 'find your pc', 'find your pc s ip', 'find your pc s ip address']
b = len(a)
def is_sub(sub, lst):
ln = len(sub)
return any(lst[i: i + ln] == sub for i in range(len(sub) - ln + 1))
# print(is_sub(a[0],a[2]))
for i in range(b-1):
for j in range(i+1,b):
if is_sub(a[i],a[j]):
index = a.index(a[i])
a.remove(a[index])
break
b = len(a)
print(a)我得到的输出结果是
['find old mails', 'finding', 'find your pc s ip', 'find your pc s ip address']和预期输出
['find old mails', 'finding', 'find your pc s ip address']发布于 2019-10-14 15:05:08
通过对您的子字符串检查函数进行一些更改(特别是使用in来检查子字符串)并使用列表理解,您可以获得期望的结果:
def is_sub(item, lst):
"""Check whether an item is a substring of other items in a list."""
return any([item in i for i in [i for i in lst if i != item]])
output = [i for i in a if not is_sub(i, a)]['find old mails', 'finding', 'find your pc s ip address']https://stackoverflow.com/questions/58371468
复制相似问题