Как использовать для цикла, чтобы найти все экземпляры подстроки в строке - PullRequest
0 голосов
/ 26 марта 2019

Для школьного проекта мне нужно найти позиции всех экземпляров элементов списка в строке.Я неопытен в Python и, возможно, просто не понимаю, как это сделать, имея ограниченные знания об операторах if, циклах, переменных и списках.

Единственный метод, который я до сих пор пытался использовать, - использовать цикл for.Я создал переменную счетчика «i», и для каждого списка [i] в ​​строке мне нужна его позиция.Прежде чем я смогу начать поиск позиций, мне нужно определить элементы списка в строке.

list1=['a','b','c']
str1='aabfh'
i=0
while "some condition":
    for list1[i] in str1:
        print(list1[i])
    i=i+1

Я ожидал вывод, подобный:

a
a
b

, но вместо этого получил:

a
a
b
f
h

Где я ошибся?

Ответы [ 3 ]

1 голос
/ 26 марта 2019

Вы используете неправильный цикл for.

Это берет каждый символ в строке, присваивает его x и печатает его:

for x in 'aabfh':
    print (x)

Принимает каждый символ в строке, присваивает его списку list1 [i] и печатает его:

for list1[i] in 'aabfh':
    print(list1[i])

В вашем коде, если вы посмотрите на list1, вы обнаружите, что он был изменен на ['h', 'h', 'h'], потому что это то, что вы сказали ему делать (или, по крайней мере, столько же, сколько h как позволит "некое условие").

0 голосов
/ 26 марта 2019

С вашим кодом довольно много проблем.

Как @Kenny Ostrom указал в своем ответе, ваш for формат неверен.

Формат цикла for:

for new_variable_name in list:
    print(new_variable_name)

new_variable_name назначается каждому элементу в этом списке

for циклы повторяются для каждого элементав списке один раз.В вашем случае

for char in str1
    print(char)

напечатает

a
a
b
f
h

Другая проблема, с которой вы столкнулись - это ненужный цикл while.Вы окружаете свою петлю for петлей while, которая будет продолжать работать и не останавливаться.Если у вас не было цикла for, это может быть полезно для вас, но в этом нет необходимости, поскольку вы уже используете цикл for.

Структура вашей программы должна выглядеть примерно такесли вы хотите использовать цикл for:

list1=['a','b','c']
str1='aabfh'
i=0
for character in str1:
   '''
   Some code here that figures out **if** the character is in list1 and then prints that character. 
   '''

Вы сможете понять это отсюда.

0 голосов
/ 26 марта 2019

Ваш цикл для повышения NameError. вы не можете получить доступ к элементам списка в цикле for, как этот. замените его на этот, чтобы напечатать желаемый результат:

for char in str1:
    if char in list1:
        print(char)

a
a
b

для печати своей позиции вы можете использовать index:

for char in str1:
    if char in list1:
        print(list1.index(char))

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