【问题标题】:Python make a list of words from a filePython从文件中制作单词列表
【发布时间】:2017-05-15 00:59:45
【问题描述】:

我正在尝试从一个文件中创建一个单词列表,该文件仅包含不包含任何重复字母(例如“hello”但会包含“helo”)的单词。

当我使用仅通过输入单词创建的列表时,我的代码词完美,但是当我尝试使用文件列表执行此操作时,它只会打印所有单词,即使它们包含重复的字母。

words = []
length = 5
file = open('dictionary.txt')
for word in file:
    if len(word) == length+1:
        words.insert(-1, word.rstrip('\n'))
alpha = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
x = 0
while x in range(0, len(alpha)):
    i = 0
    while i in range(0, len(words)):
        if words[i].count(alpha[x]) > 1:
            del(words[i])
            i = i - 1
        else:
            i = i + 1
    x = x + 1
print(words)

【问题讨论】:

  • def has_double_letter(word): return len(word) != len(set(word)) 怎么样?
  • @KlausD。如果可能,我想保留当前方法以使其简单,有什么想法吗??
  • 然后给出比“不起作用”更好的错误描述。
  • @KlausD。当我使用我输入的单词列表运行它时,它可以完美运行。但是,当我以这种方式使用文件运行它时,它仍然包含所有单词,即使它们包含重复的字母
  • 现在通过编辑将错误描述添加到问题中。

标签: python list file


【解决方案1】:

这个 sn-p 添加单词,并在插入之前删除重复的字母

words = []
length = 5
file = open('dictionary.txt')
for word in file:
    clean_word = word.strip('\n')
    if len(clean_word) == length + 1:
        words.append(''.join(set(clean_word))

我们将字符串转换为一个集合,它删除了重复项,然后我们再次将集合加入一个字符串:

>>> word = "helloool"
>>> set(word)
set(['h', 'e', 'l', 'o'])
>>> ''.join(set(word))
'helo'

我不是 100% 确定您要如何删除这样的重复项,所以我假设单词中的字母不能超过一次(因为您的问题指定了“重复字母”而不是“双字母”)。

【讨论】:

    【解决方案2】:

    您的 dictionary.txt 是什么样的?只要每个单词都在单独的行上(因为文件中的 x 遍历行)并且至少其中一些单词有 5 个不重复的字母,您的代码就应该可以工作。

    另外,还有几个提示:

    • 您可以通过调用file.readlines() 将文件中的行读入列表中
    • 您可以使用集合检查列表或字符串中的重复项。集合删除所有重复元素,因此检查 len(word) == len(set(word)) 是否会告诉您是否有重复的字母在更少的代码中:)

    【讨论】:

    • 文本文件只是一个新行上的单词列表,我知道这可以更简单,但如果可能的话我想保持这种方式......有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2013-10-06
    相关资源
    最近更新 更多