Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python删除列表中多余的句子_Python - Fatal编程技术网

用Python删除列表中多余的句子

用Python删除列表中多余的句子,python,Python,我试图删除Python列表中的多余句子。一句话可以包含在另一句话中,我想保留最长的一句 例如 处理后: my_list = ['Her name is Laura and she\'s from Texas','He owns a dog and a cat', 'Marie will turn eighteen in October'] (略优于)二次解,检查下一个最小的条目是否是后续较大字符串中的子字符串 my_list = sorted(my_list, key=lam

我试图删除Python列表中的多余句子。一句话可以包含在另一句话中,我想保留最长的一句

例如

处理后:

    my_list = ['Her name is Laura and she\'s from Texas','He owns a 
    dog and a cat', 'Marie will turn eighteen in October']
(略优于)二次解,检查下一个最小的条目是否是后续较大字符串中的子字符串

my_list = sorted(my_list, key=lambda x: -len(x)) # sort in descending order of length

indices_to_delete = [] 
for i, x in enumerate(my_list[:]):
    for j, y in enumerate(my_list[:][i:]):
        if x in y:
            indices_to_delete.append(i)
            break

my_list = [x for i, x in enumerate(my_list) if i not in indices_to_delete]

这种方法的一个缺陷是它会对数据进行排序。如果您不希望发生这种情况,请不要使用它。

此方法计算每个字符串是列表中其他每个字符串的子字符串的次数,并删除多个字符串的子字符串

my_list = [
    'Her name is Laura and she\'s from Texas', 'October',
    'He owns a dog and a cat', 'Her name is Laura', 'He owns a dog',
    'Marie will turn eighteen in October'
]

redundant_counts = [
    len([sent for other_sent in my_list if sent in other_sent]) for sent in my_list
]

my_list = [
    sent for count, sent in zip(redundant_counts, my_list) if count == 1
]

请提供您已经尝试过的代码简单的字符串比较真的能解决您的问题吗?如果有“他拥有一只猫”、“他拥有一只狗”、“他拥有一只猫和一只狗”这样的句子,会怎么样?如果你不能分析内容,你的结果会很奇怪,我认为这是一个简单的解决方案,没错。但我担心,它可能会更复杂一点。如果,f.e.有所有的句子:“他有一只猫”,“他有一只狗”,“他有一只猫和一只狗”,你不会删除“他有一只狗”。我认为,有必要对内容进行分析。因为python可能是错误的工具,也许在Prolog或类似的东西中更容易找到方法。@am2 OP在他的问题中没有给出证据表明他需要处理这样的情况,或者我遗漏了什么?我知道,这就是为什么我将答案标记为有用的原因。但问题依然存在。您可以尝试使用正则表达式或其他任何东西。但对我来说,“十月”和“…十月”并不是多余的,只是文字听起来很相似。这不是你的问题,但是《安迪是非法的》、《桑迪病了》这部作品的问题使得《桑迪是非法的》@am2好吧,如果出现这样的情况,那么没有简单的方法来解决,我同意。
my_list = [
    'Her name is Laura and she\'s from Texas', 'October',
    'He owns a dog and a cat', 'Her name is Laura', 'He owns a dog',
    'Marie will turn eighteen in October'
]

redundant_counts = [
    len([sent for other_sent in my_list if sent in other_sent]) for sent in my_list
]

my_list = [
    sent for count, sent in zip(redundant_counts, my_list) if count == 1
]