从列表中删除包含单词的字符串,不要重复字符串

2024-04-23 16:03:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让我的代码从包含特定单词的文件中提取句子。我看到的代码如下:

import re
f = open('RedCircle.txt', 'r')
text = ' '.join(f.readlines())
sentences = re.split(r' *[\.\?!][\'"\)\]]* *', text)

def finding(q):
    for item in sentences:
        if item.lower().find(q.lower()) != -1:
            list.append(item)

    for sentence in list:
        outfile.write(sentence+'\r\n')

finding('cats')
finding('apples')
finding('doggs')

但如果句子是:

'I saw doggs and cats eating apples' 

有没有一种方法可以轻松地删除这些重复项,或者使代码在文件中不会有任何重复项?你知道吗


Tags: 文件代码textinreforsentencesitem
2条回答

Python中几乎没有可以用来删除重复元素的选项(在本例中,我相信它的语句)。你知道吗

  1. 使用Set。你知道吗
  2. 使用itertools.groupby
  3. OrderedDict作为OrderedSet,如果顺序很重要

所有你需要做的,是收集在一个单一的列表中的结果,并使用在这个答案中提供的链接,以创建自己的食谱删除重复。你知道吗

另外,不要在每次搜索后将结果转储到文件中,而是将其推迟到删除所有重复项之后。你知道吗

很少有提示性变化

使用集合

  1. 将函数转换为生成器

    def finding(q):
        return (item for item in sentences 
                if item.lower().find(q.lower()) != -1)
    
  2. 链接每次搜索的结果

    from itertools import chain
    chain.from_iterable(finding(key) for key in ['cats', 'apples'. 'doggs'])
    
  3. 把结果传给集合

    set(chain.from_iterable(finding(key) for key in ['cats', 'apples'. 'doggs']))
    

使用装饰器

def uniq(fn):
    uniq_elems = set()
    def handler(*args, **kwargs):
        uniq_elems.update(fn(*args, **kwargs))
        return uniq_elems
    return handler
@uniq
def finding(q):
    return (item for item in sentences 
            if item.lower().find(q.lower()) != -1)

如果顺序很重要

将装饰器更改为使用OrderedDict

def uniq(fn):
    uniq_elems = OrderedDict()
    def handler(*args, **kwargs):
        uniq_elems.update(uniq_elems.fromkeys(fn(*args, **kwargs)))
        return uniq_elems.keys()
    return handler

注意

  • 避免命名与Python中的保留字冲突的变量(比如将变量命名为list

首先,顺序重要吗? 第二,如果它们在原始文本文件中实际上是重复的,是否应该出现重复的内容?你知道吗

如果第一个为“否”,第二个为“是”: 如果重写该函数以获取搜索字符串列表并对其进行迭代(这样它就可以检查当前语句中每个要查找的单词),那么一旦找到它,就可以跳出循环。你知道吗

如果第一个是,第二个是, 在将项目添加到列表之前,请检查它是否已经存在。具体来说,记下您在原始文本文件中传递了哪些列表项,以及您将看到的下一个列表项。这样你就不必检查整个清单,只需检查一项。你知道吗

如果你对第一个问题回答“不”,对第二个问题回答“是”,那么阿比吉特建议的一套方法就可以奏效。你知道吗

相关问题 更多 >