Итерируйте по списку, чтобы проверить, присутствует ли символ, используя для l oop. Если присутствует, поместите персонажа в новый список в том же месте - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь выполнить sh 2 вещи здесь. Во-первых, мне нужно проверить список, чтобы увидеть, присутствует ли конкретный символ в списке.

Если символ находится в списке, то я бы хотел поместить этот символ в отдельный список на точно такое же место в индексе, и если его нет, список будет иметь нулевое значение в тех местах, где нет этой буквы. Таким образом, гипотетически в приведенном ниже примере, если я проверяю букву L, я бы хотел вернуть список, который гласит word2 = ['','','L','L',''].

Я пытался это с помощью для l oop , но я не могу вернуть то, что я ищу. Любая помощь с благодарностью, большое спасибо!

letter = 'L'  
word = ['H','E','L','L','O']  
word2 = []  

for i in word:  
     if letter in word:  

Ответы [ 5 ]

2 голосов
/ 24 марта 2020

вы можете использовать понимание списка:

letter = 'L'
word = ['H','E','L','L','O']
word2 = [w if w == letter else '' for w in word]
word2

вывод:

['', '', 'L', 'L', '']

или вы можете использовать простое for l oop:

word2 = []
for w in word:  
    if w  == letter:
        word2.append(letter)
    else:
        word2.append('')
1 голос
/ 24 марта 2020

Просто напоминание, что в Python строки являются итеративными, и если вам не нужен список символов, вы можете сделать:

letter = 'L'
word = 'HELLO'

word2 = ''.join(c if c == letter else ' ' for c in word)
1 голос
/ 24 марта 2020
letter = 'L'  
word = ['H','E','L','L','O']  

indices = [i for i, w in enumerate(word) if w == letter]
new_word = [''] * len(word)
for i in indices:
  new_word[i] = letter
print(new_word)

Еще одно простое решение с использованием lambda:

letter = 'L'  
word = ['H','E','L','L','O']
new_word = map(lambda w: letter if w == letter else '', word)
print(new_word)
1 голос
/ 24 марта 2020

То, что вы хотите, это проверить равенство символов, вы можете перебирать символы слова, и оно равняется заданной c букве: оставьте ее, иначе поставьте пустой символ

for word_letter in word:
    if word_letter == letter:
        word2.append(word_letter)
    else:
        word2.append("")

Вставьте if в append

for word_letter in word:
    word2.append(word_letter if word_letter == letter else "")

Вставьте for в понимание списка

word2 = [word_letter if word_letter == letter else "" for word_letter in word]

Угадайте игру слов

Если вы хотите, чтобы пользователь угадал слово, вам может потребоваться проверка по нескольким буквам, а не по одному разу, для того чтобы сохранить буквы в списке, и вместо проверки на равенство проверить включение в список попыток

tries = []
word = ['H', 'E', 'L', 'L', 'O']
word2 = [word_letter if word_letter in tries else "" for word_letter in word]

while "" in word2:  # a letter is still empty
    letter = input("Try a letter :")
    tries.append(letter)
    word2 = [word_letter if word_letter in tries else "" for word_letter in word]
    print("Word is now", word2)
0 голосов
/ 24 марта 2020

При использовании Python вам следует избегать мышления в терминах индекса. Подойдите к проблеме с точки зрения применения преобразования к элементам списка для получения другого. Вот для чего нужны списки.

def keepL(letter): return letter if letter == "L" else ""

word2 = [ keepL(letter) for letter in word ]

Существует множество других приемов, которые можно использовать для обработки строк, таких как умножение на число для повторения строки (включая нулевое время) и обработка логических значений (результатов сравнения) как 0 или 1.

Комбинируя их, ваше понимание списка может выполнять работу без определения функции (в данном конкретном случае):

word2 = [ letter*(letter=="L") for letter in word ]

умножает букву на 1 или ноль в зависимости от того, является ли это 'L' или нет.

...