Получение цикла «for» для удаления символов из списка, если они равны - PullRequest
0 голосов
/ 05 октября 2018

В моей программе пользователь вводит секретное слово, которое должен угадать другой человек (палач).Письма затем помещаются в список.Я пытаюсь сделать цикл, который проверяет, есть ли в списке несколько одинаковых букв, и удаляет их, если есть.Это мне удалось.Проблема в том, что этот цикл также удаляет другие символы, которые не должны быть удалены.

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

Используя слово «секрет» и затем печатая список, я получаю вывод:

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

Он удалил e, но, к сожалению, r также был удален.Кроме того, этот цикл не удаляет третью равную букву.Используя «скрытный» вывод:

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

Здесь удаляем одно из e, а также r, t и v

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

В вашем примере кода отсутствует ряд функций, таких как инициализация q и l.И я подозреваю, что у вас должен быть внешний цикл, который вы нам не показываете, иначе пример не имеет большого смысла (в данном примере 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)

Это всего лишь несколько примеров.Есть много способов сделать это.Извините, я не могу точно сказать, что не так с вашим кодом.В примере отсутствует слишком много контекста.Но вы вероятно усложняете проблему.

0 голосов
/ 05 октября 2018
word = 'secretblahblahset'
result = ''

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

print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...