как разбить строку на два сегмента из двух слов, где первое слово второго сегмента повторяет последнее слово первого

1

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

txt = raw_input("")

newtxt = txt.split(" ")

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

  • 0
    Поправь свой пример, бутон.
Теги:
string
split
segment

3 ответа

3
Лучший ответ

Используйте почтовый индекс:

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
0

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

первая версия свободно основана на 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

Вариант с 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']

Ещё вопросы

Сообщество Overcoder
Наверх
Меню