繁体   English   中英

如果字符相等,则获取“ for”循环以从列表中删除字符

[英]Getting a “for” loop to remove characters from list if they are equal

在我的程序中,用户输入另一个人要猜测的秘密单词(hang子手)。 然后将字母放入列表中。 我试图做一个循环,检查列表中是否有几个相等的字母,如果有则删除它们。 我已经解决了 问题在于,此循环还会删除其他不希望删除的字符。

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也已删除。 同样,此循环不会删除第三个相等的字母。 使用“秘密”输出是

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

在这里,删除e之一,但同时删除r,t和v

word = 'secretblahblahset'
result = ''

for c in word:
  if not c in result:
    result += c 

print(result)

您的示例代码缺少许多功能,例如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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM