Python 检查列表中的一个字符串是否是同一列表中另一个字符串的子集
我正在编写一个包含字符串列表的python脚本。我想创建一个方法,该方法接收字符串列表,返回超集列表并删除子集。考虑下面的情况:Python 检查列表中的一个字符串是否是同一列表中另一个字符串的子集,python,Python,我正在编写一个包含字符串列表的python脚本。我想创建一个方法,该方法接收字符串列表,返回超集列表并删除子集。考虑下面的情况: A = ['this is a sentence', 'who is alice', 'sentence', 'hi i am carrot', 'i am carrot'] 现在,如果您看到数组A,它有两个元素,即成对超集和子集,“这是一个句子”是“句子”的超集,类似地“你好,我是胡萝卜”和“我是胡萝卜”我想编写一个函数,从列表中删除子集并返回更新的列表 在上面的
A = ['this is a sentence', 'who is alice', 'sentence', 'hi i am carrot', 'i am carrot']
现在,如果您看到数组A
,它有两个元素,即成对超集和子集,“这是一个句子”
是“句子”
的超集,类似地“你好,我是胡萝卜”
和“我是胡萝卜”
我想编写一个函数,从列表中删除子集并返回更新的列表
在上面的示例中,输出如下所示:
ResultA = ['this is a sentence', 'who is alice', 'hi i am carrot']
我已经编写了一个快速代码示例,可以展示我正在寻找的内容,但我不确定使用两个for
循环是否正确:
elements_to_keep = []
for i in phase_two_match:
for j in phase_two_match:
if i == j:
continue
else:
if j not in i:
elements_to_keep.append(j)
这将在
a
中建立一个项目列表,对于a
中的每个项目,这些项目要么与该项目共享一个索引(即,是相同的项目),要么不是该项目的子字符串。此操作将从a
返回不在中的项目,但跳过项目完全匹配的实例(即:跳过自身)
实现这一点的简单方法如下(尽管不是最有效的):
python中的变量名通常是snake\u case
。因此,ResultA
应该是result_a
。迭代两个列表并删除if“句子”。查找(“blabla”)!=-1@AlekseiMaide“句子”中的“blabla”优先于find()
,因为您不需要索引顺序没有意义。@moingrawr它们都不是子集
[x for i, x in enumerate(A) if all(i==idx or x not in elem for idx, elem in enumerate(A))]
[x for x in A if not any(x in y and x!=y for y in A)]
# returns:
['this is a sentence', 'who is alice', 'hi i am carrot']
def myFunc(A):
duplicate_index = []
for i, a in enumerate(A):
score = [1 if a in b else 0 for b in A]
if sum(score) > 1:
duplicate_index.append(i)
return [c for i, c in enumerate(A) if i not in duplicate_index]