所以从一个字符串列表开始,如下所示
string_list = [‘rest’,‘resting’,‘look’,‘looked’,‘it’,‘spit’]
我想从列表中删除另一个元素的子串的任何元素,给出结果为…
string_list = [‘resting’,‘spit’]
解决方法
第一个构建块:子串.
您可以使用来检查:
- >>> 'rest' in 'resting'
- True
- >>> 'sing' in 'resting'
- False
接下来,我们将选择创建新列表的天真的方法.我们将逐个添加项目到新的列表中,检查它们是否是子字符串.
- def substringSieve(string_list):
- out = []
- for s in string_list:
- if not any([s in r for r in string_list if s != r]):
- out.append(s)
- return out
您可以通过排序来减少比较数量(毕竟更长的字符串永远不会是较短/等长的字符串的子字符串):
- def substringSieve(string_list):
- string_list.sort(key=lambda s: len(s),reverse=True)
- out = []
- for s in string_list:
- if not any([s in o for o in out]):
- out.append(s)
- return out