python - 获取 "for"循环以从列表中删除字符(如果它们相等)

标签 python loops

在我的程序中,用户输入一个 secret 单词,另一个人要猜测(hangman)。然后将这些字母放入列表中。我正在尝试创建一个循环来检查列表中是否有多个相同的字母,如果有则删除它们。 这我已经做到了。问题是这个循环还删除了其他不被删除的字符。

word = []

for i in range(int(len(secret_word)) - 1):
    if word[l] == word[q]:
        word.pop(l)
        q += 1
        if q > int(len(word)):
            break
    else:
        l +=1

使用“ secret ”一词,然后打印列表,我得到的输出是

['s', 'c', 'e', 't']

它删除了 e,但不幸的是 r 也被删除了。 此外,此循环不会删除第三个相同的字母。使用“ secret ”输出是

['s', 'c', 'e', 'i', 'e']

此处,删除其中一个 e,同时删除 r、t 和 v

最佳答案

您的示例代码缺少许多功能,例如 ql 的初始化。我怀疑您一定有一个没有向我们展示的外循环,否则该示例没有多大意义(在示例中给定的 word 只是一个空列表)。

如果您想要字符串中的所有唯一字母,您可以使用 set() 轻松完成:

unique_letters = set(secret_word)

但是,这不会维持秩序。我不知道你的情况是否需要维持秩序。但如果您愿意,有很多方法可以做到这一点,通常仍然涉及 set() 但不一定。这是一种方法:

unique_letters = []
seen = set()
for let in secret_word:
    if let in seen:
        continue

    unique_letters.append(let)
    seen.add(let)

另一种方式,作为一句台词,可能是这样的:

unique_letters = sorted(set(secret_word), key=secret_word.index)

这些只是几个例子。有很多方法可以做到这一点。抱歉,我无法确切地说出您的代码有什么问题。该示例缺少太多上下文。但你可能使问题过于复杂化了。

关于python - 获取 "for"循环以从列表中删除字符(如果它们相等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52665330/

相关文章:

c++ - 是否可以在给定 n 的情况下执行 n 个嵌套 "loops(any)"(具有不同的循环控制变量)?

python - 重新安装后Eclipse找不到库

python - Windows 上的 Cmake 与 python 出现问题

python - pandas,如何将列添加到多索引列 DataFrame

python - 在不可预测的背景下检测叶子

c - 在 C 中使用多个 For 循环

excel - 当代码已正确执行时卡在循环中

javascript - JS 如何从each循环内的数组内的数组中获取对象值

python regex lookbehind删除字符串中的_sublabel1,如 "__label__label1_sublabel1"

r - 循环 t.tests 以获取 r 中的数据帧子集