как разбить строку на два сегмента из двух слов, где первое слово второго сегмента повторяет последнее слово первого - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь выяснить, как разбить строку на сегменты по 2 слова, где первое слово второго сегмента повторяет последнее слово первого. (в Python 2) Например, «Привет, я человек по имени Джо Норман» должен быть разделен на «Привет я», «Я есть», «Я Джо», «Джо Норман». У меня есть следующий код:

txt = raw_input("")

newtxt = txt.split(" ")

проблема в том, что он разбивает txt на каждый пробел, а не на любой другой. Я бы не хотел использовать библиотеки. Спасибо.

Ответы [ 3 ]

0 голосов
/ 06 января 2019

Опция с listcomp:

s = "hi i am a human named joe norman"
s = s.split()

l = [f'{i} {s[num + 1]}' for num, i in enumerate(s)
    if num + 1 < len(s)]

print(l) #['hi i', 'i am', 'am a', 'a human', 'human named', 'named joe', 'joe norman']
0 голосов
/ 06 января 2019

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

первая версия свободно основана на itertools.pairwise:

def pairs1(words):
    w2 = iter(words)
    next(w2, None)
    return zip(words, w2)

это хорошо, потому что срез (words[1:]) в приведенном выше коде Даниэля создает копию списка words, который может быть большим, в то время как все, что нужно, это итератор в «другой» позиции

другая версия, использующая range():

def pairs2(words):
    for i in range(1, len(words)):
        yield (words[i-1], words[i])

, который похож на Миколу, но мне приятнее. Конечно, любой из них может быть переписан для использования списочных представлений, например:

l = [f'{words[i-1]} {words[i]}' for i in range(1, len(words))]

эквивалентно:

l = [f'{w} {x}' for w, x in pairs2(words)]
0 голосов
/ 06 января 2019

Использование zip :

t = "hi i am a human named joe norman"
words = t.split()

result = list(zip(words, words[1:]))

for first, second in result:
    print("{} {}".format(first, second))

выход

hi i
i am
am a
a human
human named
named joe
joe norman
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...