2017-02-21 11 views
1

У меня возникли проблемы с пониманием того, почему эта программа не работает. Из того, что я знаю до сих пор, это вызвано либо вложенными циклами, либо функцией split().Как использовать вложенные циклы и функцию split() для создания счетчика букв списка?

letters = "abcd" 
alphabet = "abcd" 

counter = [0,0,0,0] 

n = 0 
splitAlpha = alphabet.split() 
for letter in splitAlpha: 
    for key in letters: 
     if key == letter: 
      counter[n] +=1 
      n+=1 

print(counter) 
+0

Ну .. Ваше использование 'n' немного неправильно. Вы могли бы лучше получить индекс данной буквы в 'letter' и обновить, что в' counter'/ – favoretti

+0

метод split не предназначен для разделения слов? по умолчанию он ищет разделители пробелов – LordNeo

+0

'alphabet.split()' создает список с одним элементом, который вам не нужен. оставьте это и используйте 'alphabet' непосредственно в вашем внешнем цикле' for'. –

ответ

3

Вам не нужно alphabet.split() как это вернуть ты список ["abcd"], который не имеет отношения к вашей потребности.

letters = "abcd" 
alphabet = "aacd" 

counter = [] 

for i, l in enumerate(letters): 
    counter.append(alphabet.count(l)) 


print(counter) 

Выход:

[2, 0, 1, 1] 
+0

Если я правильно его понимаю, он хочет подсчет 'a' в' counter [0] ',' b' в 'counter [1]' и т. д. Ваш пример не будет работать, если 'letter' будет иметь больше, чем 1 появление. – favoretti

+0

yee это не работает, если буквы повторяются, но я был взволнован на секунду: D – Ivan

+0

@favoretti, Спасибо за комментарий, я не был уверен, что понял намерение OP. Я исправил свой код при ответе. –

1

Просто для полноты картины, вот еще один способ идти о нем:

letters = "abcdabcdabcdaz" 
alphabet = "abcd" 

counter = [0,0,0,0] 

for letter in letters: 
    try: 
     counter[alphabet.index(letter)] +=1 
    except ValueError: 
     pass 

print(counter) 

<list>.index(<element>) даст вам положение разыскиваемого элемента список (или ValueError), если не найден. Улавливая (и игнорируя) исключение, вы пропускаете приращение счетчиков для несуществующих букв вашего определения alphabet.

+0

Спасибо! : D, если бы я мог дать зеленый галочку для обоих ваших ответов, я бы: D – Ivan

0

Heyo, может попробовать функцию списка (разбивает слова в массив):

letters = "abcd" 
alphabet = "abcd" 

counter = [0,0,0,0] 

n = 0 
splitAlpha = list(alphabet) 
for letter in splitAlpha: 
    for key in letters: 
     if key == letter: 
      counter[n] +=1 
      n+=1 

print(counter) 

Эта программа выводит

[1, 1, 1, 1]