У меня проблема с модулем "коллекции" в Python - PullRequest
0 голосов
/ 04 июня 2018

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

Пример:

«Мне нужно выпить» должно стать: «Мне нужен напиток»

Вот код.Это довольно круто, я знаю:

import collections

c = collections.Counter()

words_title = []

new_word = ''

new_word2 = ''

with open("file.txt", "r", encoding = "utf-8-sig") as file:                   
    reading = file.read()
    splitted = reading.split()

words_title = [word.title() for word in reading]

for word in words_title:
    for wor in word:
        for wo in word:
            c[wo] += 1
            new_word += word

for word2 in new_word:
    word2 = word2 * c[word2]
    new_word2 += word2

print(c)
print(new_word)
print(new_word2)

Ответы [ 3 ]

0 голосов
/ 04 июня 2018
sentence = "I need a drink"
words = sentence.split()

out_sentence = ""

for word in words:
    for letter in word:
        for _ in range(word.count(letter)):
            out_sentence += letter
    out_sentence += " "

out_sentence = out_sentence[:-1]

print(out_sentence)
0 голосов
/ 05 июня 2018

Вот одна строчка в строках ответа Дукса, но с использованием выражения генератора и объединением всех последовательностей символов в конце, а не на каждой итерации:

from collections import Counter

s = 'I need a drink, coconut'

print(''.join(c * n[c] for w in s.split() for n in (Counter(w + ' '),) for c in w + ' '))
# Output: I neeeed a drink, ccooccoonut

Обратите внимание, что второе 'для'повторяется только один раз, чтобы присвоить объекту Counter значение n;этот маленький трюк гарантирует, что новый объект Counter создается только для каждого слова w, а не для каждого символа c.

0 голосов
/ 04 июня 2018

Вот попытка сделать то, что, я думаю, вы хотите сделать:

from collections import Counter

start_string = '  coconuts taste great '

words = start_string.strip().split() # get single words from string

for word in words: # loop over individual words
    c = Counter(word) # count letters
    new_word = ''
    for w in word: # loop over letters in the original word
        new_word += w*c[w] # write the new word
    print new_word

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