如何将一个字符串分成两个单词的不同部分,其中第二部分的第一个单词重复第一部分的最后一个单词

2021-05-16 08:10:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想弄清楚如何把一个字符串分成两个单词的段,其中第二段的第一个单词重复第一段的最后一个单词。(在python2中)例如,“hi i am an human named joe norman”应该切分为“hi i”、“i am”、“am joe”、“joe norman”。我有以下代码:

txt = raw_input("")

newtxt = txt.split(" ")

问题是它按每个空格分割txt,而不是按每个空格分割。我不想用图书馆。非常感谢。你知道吗

3条回答
网友
1楼 ·

使用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
网友
2楼 ·

为了完整起见,还有几个选项:

第一个版本松散地基于^{}

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

这很好,因为上面Daniel代码中的片段(words[1:])创建了一个words列表的副本,它可能很大,而所需要的只是一个位于“不同”位置的迭代器

使用^{}的另一个版本:

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

这和Mykola的很像,但对我来说感觉更好。当然,也可以改写为使用列表理解,例如:

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

相当于:

l = [f'{w} {x}' for w, x in pairs2(words)]
网友
3楼 ·

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']

相关问题