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

时间:2018-01-22 14:59:26

标签: python

我正在处理带有字符串列表的python脚本。我想创建一个方法,它接受一个字符串列表并返回一个超集列表并删除子集。考虑以下情况:

A = ['this is a sentence', 'who is alice', 'sentence', 'hi i am carrot', 'i am carrot']

现在,如果你看到array A,它有两个元素是一对超集和子集,'this is a sentence''sentence'的超集,类似'hi i am carrot'和{{ 1}}我想编写一个从列表中删除子集并返回更新列表的函数。

在上面的示例中,输出看起来像:

'i am carrot'

我已经编写了一个快速代码示例,可以展示我正在寻找的内容,但我不确定是否使用两个ResultA = ['this is a sentence', 'who is alice', 'hi i am carrot'] 循环是正确的方式:

for

3 个答案:

答案 0 :(得分:1)

[x for i, x in enumerate(A) if all(i==idx or x not in elem for idx, elem in enumerate(A))]

这会在A中构建一个列表,列出A中每个项目与该项目共享一个索引(即属于同一项目)或者不是该项目的子字符串。“ / p>

答案 1 :(得分:1)

A的{​​{1}}项不是inA的另一项,而是跳过项目完全匹配的实例(即跳过自己)

[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']

答案 2 :(得分:0)

一种简单的方法是遵循(虽然效率不高):

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]