python - 输出出现两次 - 更新发布此问题前 30 分钟提出的问题

标签 python list indexing append range

这是我的代码

import re
    with open('newfiles.txt') as f:
        k = f.read()
    p = re.compile(r'[\w\:\-\.\,\']+|[^[\w\:\-\.\'\,]\s]')
    originaltext = p.findall(k)
    uniquelist = []
    for word in originaltext:
        if word not in uniquelist:
            uniquelist.append(word)
    indexes = ' '.join(str(uniquelist.index(word)+1) for word in originaltext)
    n = p.findall(indexes)
    file = open("newfiletwo.txt","w")
    file.write (' '.join(str(e) for e in n))
    file.close()
    file = open("newfilethree.txt","w")
    file.write(' '.join(uniquelist))
    file.close()
    with open('newfiletwo.txt') as f:
        indexess = f.read()
    with open('newfilethree.txt') as f:
        differentwords = f.read()
    differentwords = p.findall(differentwords)
    indexess = [uniquelist.index(word) for word in originaltext] 
    for word in originaltext:
        if not word in differentwords:
            differentwords.append(word)
        i = differentwords.index(word)
        indexess.append(i)
    s = "" # the reconstructed sentence
    for i in indexess:
        s = s + differentwords[i] + " "
    print(s)

该程序基本上采用外部文本文件,返回其位置的索引(如果有任何单词重复,则采用第一个位置),然后将位置保存为外部文件。在执行此操作时,我拆分了文本文件,包括拆分标点符号,并将文件中出现的不同单词和标点符号也保存为外部文件。现在,对于困难的部分,使用这两个外部文件 - 索引和不同的分隔单词,我尝试重新创建原始文本文件,包括标点符号。但出现了标题所示的错误:

Traceback (most recent call last):
        File "E:\Python\Index.py", line 31, in <module>
           s = s + differentwords[i] + " "
    IndexError: list index out of range

不想听起来很粗鲁,但我是一个初学者,请尝试以简单的方式尽可能少地改变,因为我自己创建了这个。你们可能知道一种更短的方法来做到这一点,但这是我可以处理的简单程度,由代码的长度证明。我尝试缩短原始文本文件,但事实证明没有用。有人知道为什么会出现错误以及如何修复它吗?我现在并不寻求效率,也许经过几个月的学习,但最简单的(我不介意太长)答案将是最好的。抱歉,如果我重复了很多话:-)

'newfiles' - 一堆带标点符号的句子

更新

代码不显示错误,但将原始句子打印两次。由于删除了第 23 行的 +1,错误已经消失。有谁知道为什么输出会重复两次?

最佳答案

问题是,你如何限定什么词是,什么不是。例如逗号是单词的一部分吗?在您的情况下,没有这样提到,但它也不是分隔符。所以你最终会得到单独的单词逗号或点等等。我无法访问您的输入,因此我只能提供示例:

p = re.compile(r'[\w\:\-\.\,]+|[^[\w\:\-\.\,]\s]')

有一点 - 在这种情况下:“Word”、“word”、“Word”、“Word.”、“word”都是单独的单词。因为点和逗号是单词的一部分。你不能一边吃蛋糕一边吃它。要解决这个问题...如果分隔之前有空格,您需要存储信息。

更新: 哦是的。双输出。存储在中间的文件 - 没问题。所以在那之后就提交了一些东西。看这两行: i = differentwords.index(单词) 索引.append(i) 它们需要位于 if 语句之前。

关于python - 输出出现两次 - 更新发布此问题前 30 分钟提出的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41783327/

相关文章:

python - 在 Python 中使用 Selenium 滚动模态窗口

Python3 - 无法读取 docx、odt 文件 - UnicodeDecodeError : 'utf-8' codec can't decode byte 0xea in position 10: invalid continuation byte

python - 使用 Doxygen 为 python 脚本生成文档

python - 将列表列表转换为嵌套字典

c - 如何在给定索引的情况下更改字符串中字符的值?

sql-server - 什么是 Sql Server 中的书签查找?

python - 在pygame中将玩家 move 到鼠标位置

java - 列表中的节点

c# - 在 C# 中访问列表中的项目

android - 如何在 View 上执行 onLongClick 后从 ViewGroup (FrameLayout) 获取特定(自定义) View 的索引