, если вы изменили while
l oop для проверки значения индекса i
и длины переменной saant
:
print('saant lenght: ', len(sanat))
while k < int(apulista[-1]) + 1:
print('i = ', i)
sana = sanat[i].strip(",.")
pituus = len(sana)
if pituus == k:
j += 1
i += 1
else:
if j != 0:
lista.append(j)
lista.append(0)
k += 1
на выходе:
saant lenght: 8
i = 0
i = 1
i = 1
i = 2
i = 3
i = 3
i = 4
i = 4
i = 4
i = 5
i = 5
i = 6
i = 6
i = 6
i = 6
i = 7
i = 7
i = 7
i = 7
i = 7
i = 7
i = 7
i = 7
i = 7
i = 7
i = 7
i = 7
i = 7
i = 7
i = 8
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-61-873709d80e77> in <module>
41 return lista
42
---> 43 sanamaarat(teksti )
<ipython-input-61-873709d80e77> in sanamaarat(merkkijono)
28 while k < int(apulista[-1]) + 1:
29 print('i = ', i)
---> 30 sana = sanat[i].strip(",.")
31 pituus = len(sana)
32 if pituus == k:
IndexError: list index out of range
вы обнаружите, что пытаетесь получить доступ к индексу с тем же значением длины вашего списка saanat
, что невозможно, поэтому вы получили IndexError
ваш список saanat
имеет длину 8, так что вы можете обращаться к элементам до индекса 7, но вы можете видеть, что до IndexError
значение i
равно 8, это приводит к тому, что ваша проблема
решит вашу проблему. можно использовать collections.Counter
, чтобы найти частоту слов по длине:
from collections import Counter
teksti = "Har du någon tanken. Om inriktningsmöjligheten i matematik."
def sanamaarat(merkkijono):
count = Counter(map(len, merkkijono.split()))
max_lenght = max(count)
return [count.get(n, 0) for n in range(max_lenght + 1)]
print(sanamaarat(teksti))
вывод:
[0, 1, 2, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]