Добавление списка, который подсчитывает длину слов - PullRequest
0 голосов
/ 02 ноября 2011

Я беру слова из текстового файла, убираю каждое слово из \ n и создаю новый список из этих слов.

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

length_of_words = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

тогда, если список лишенных слов содержал 5x 7 буквенных слов и 3xДвухбуквенные слова, которые я бы в итоге получил:

length_of_words = [0,3,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

То, к чему это сводится, таково:

  • Рассчитайте длину слова, например, n
  • Добавьте один к length_of_words для length_of_words [n-1] (поскольку он по-прежнему начинается с 1 буквы, являющейся 0-м элементом)

Я действительно застрял в том, как существенно увеличить значение1 элемент в списке на 1, вместо добавления 1 в конец списка.

На данный момент у меня есть следующее:

lines = open ('E:\Python\Assessment\dracula.txt', 'r'). readlines ()

stripped_list = [item.strip() for item in lines]

tally = [] #empty set of lengths
for lengths in range(1,20):
    tally.append(0)

print tally #original tally

for i in stripped_list:
    length_word = int(len(i))
    tally[length_word] = tally[length_word] + 1
print tally

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Класс collection.Counter полезен для такого рода вещей:

>>> from collections import Counter
>>> words = 'the quick brown fox jumped over the lazy dog'.split()
>>> Counter(map(len, words))
Counter({3: 4, 4: 2, 5: 2, 6: 1})

Код, который вы разместили в своем вопросе, работает как есть, поэтому я не уверен, где вы застряли.

FWIW, вот несколько небольших улучшений кода (более Pythonic style):

stripped_list = 'the quick brown fox jumped over the lazy dog'.split()

tally = [0] * 20
print tally #original tally

for i in stripped_list:
    length_word = len(i)
    tally[length_word] += 1
print tally
0 голосов
/ 02 ноября 2011

Я считаю, что неправильная строка в вашем коде была tally[length_word], вы забыли добавить - 1

Я также внес некоторые изменения в ваш код, чтобы сделать его более pythonic

#lines = open ('E:\Python\Assessment\dracula.txt', 'r'). readlines ()

#stripped_list = [item.strip() for item in lines]

with open('/home/facundo/tmp/words.txt') as i:
    stripped_list = [x.strip() for x in i.readlines()]

#tally = [] #empty set of lengths
#for lengths in range(1,20):
#    tally.append(0)

tally = [0] * 20

print tally #original tally

for i in stripped_list:
    #length_word = int(len(i))
    word_length = len(i)
    #tally[length_word] = tally[length_word] + 1
    if word_length > 0:
        tally[word_length - 1] += 1

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