Python 检查列表中的一个字符串是否是同一列表中另一个字符串的子集

Python 检查列表中的一个字符串是否是同一列表中另一个字符串的子集,python,Python,我正在编写一个包含字符串列表的python脚本。我想创建一个方法,该方法接收字符串列表,返回超集列表并删除子集。考虑下面的情况: A = ['this is a sentence', 'who is alice', 'sentence', 'hi i am carrot', 'i am carrot'] 现在,如果您看到数组A,它有两个元素,即成对超集和子集,“这是一个句子”是“句子”的超集,类似地“你好,我是胡萝卜”和“我是胡萝卜”我想编写一个函数,从列表中删除子集并返回更新的列表 在上面的

我正在编写一个包含字符串列表的python脚本。我想创建一个方法,该方法接收字符串列表,返回超集列表并删除子集。考虑下面的情况:

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]