列表中重复项的索引

时间:2019-05-06 12:17:08

标签: python

在此代码中,任务是编写一个函数,该函数从SOWPODS.txt词典的单词列表中选择一个随机单词。文件中的每一行都包含一个单词。这行代码place[random_word.index(ask)] = ask使用索引函数分配了问值的位置,但是问题是索引函数显示列表random_word中项目的第一个索引,例如随机列表抛出{{1 }}用户输入后,它将分配类似['A', 'N', 'T', 'I', 'E', 'N', 'T']的值,即,这行代码未分配重复项。 附言我正在尝试制作一个简单的Hangman游戏

['A', 'N', 'T', 'I', 'E', ' ', ' ']

我想将import random random_word_from_file = random.choice(open('sowpods.txt', 'r').read().split()) random_word = [] for letter in random_word_from_file: random_word.append(letter) print(random_word, len(random_word)) print("\nWelcome to Hangman Game!\n") print('Secret Word: ',' '.join(random_word)) place = [] for i in range(len(random_word)): place.append(' ') print(place) chance = 0 while chance <= 6: ask = input("Enter letter: ").upper() if ask in random_word: place[random_word.index(ask)] = ask print(place) elif ask == 'exit': break elif ask not in random_word: chance += 1 else: pass 中退出的整个字母分配给random_word列表。

2 个答案:

答案 0 :(得分:1)

Python中的list.index()函数将仅返回查询出现的 first 位置的索引,这意味着如果列表中有重复的条目(与单词“ antient”),每次您只会获得该字母首次出现的索引。

要获取每次出现的Ask的索引,您可以使用列表理解,然后遍历索引列表。例如:

indices = [i for i, letter in enumerate(random_word) if letter == ask]
for index in indices:
    place[index] = ask

换句话说:

  • 创建一个包含与random_word匹配的ask索引的列表
  • 对于该列表中的每个值,将place的索引替换为ask

我相信这会满足您的需求。

答案 1 :(得分:0)

因为.index()第一次出现,所以您永远不会那样到达字母的第二次出现。

有很多方法可以解决这个问题。我所做的是创建一个tmp_word,即您的random_word。然后我将出现的每个字母都删除,让您仍然使用.index()

tmp_word = random_word
while chance <= 6:
    ask = input("Enter letter: ").upper()
    if ask in tmp_word:
        place[tmp_word.index(ask)] = ask
        for i, word in enumerate(tmp_word):
            if word == ask:
                tmp_word[i] = ''
                break
        print(place)
        # Uncomment line below to see visualization of what's happening
        # print('_', tmp_word)
    elif ask == 'exit':
        break
    elif ask not in tmp_word:
        chance += 1
    else:
        pass