将属于另一个字符串子集的所有字符串都放在同一列表中

时间:2019-04-15 23:15:37

标签: python string list set

我正在研究一个抓取项目,由于某些原因,我在某些段落中得到了完整的段落,也得到了分成段的同一段落。因此,如果该段为“我的房子是绿色的,我喜欢它。”,我有时会得到:

["My house is green. I like it.", "My house is green.", "I like it."]

因此,当我将所有内容转换为文本时,我都会将该段重复。有什么方法可以检查列表中其他字符串的子集是哪些字符串?

在这种情况下,我期望的输出将只保留["My house is green. I like it."]

2 个答案:

答案 0 :(得分:0)

一种有效的方法是:以相反的顺序遍历按短语长度排序的列表,并将每个可能的子短语添加到集合中,以便您可以使用集合有效地检查当前短语是否是子短语-前一个较长短语的短语:

output = []
seen = set()
for phrase in sorted(l, key=len, reverse=True):
    words = tuple(phrase.split())
    if words not in seen:
        output.append(phrase)
    seen.update({words[i: i + n + 1] for n in range(len(words)) for i in range(len(words) - n)})

所以给定:

l = ["My house is green. I like it.", "My house is green.", "I like it."]

output变为:

['My house is green. I like it.']

答案 1 :(得分:-1)

我会这样从列表中取出最长的字符串:

arr = ["My house is green. I like it.", "My house is green.", "I like it."]
print(max(arr, key=len))

最长的字符串不能是其他字符串的子字符串