在字符串中交替单词 - Python

-1 投票
2 回答
678 浏览
提问于 2025-04-17 13:42

我需要写一个程序,这个程序会让用户输入两个字符串,然后生成一个新的字符串。这个新字符串的构造方式是交替取第一个字符串和第二个字符串中的单词。这里的“单词”是指被空格或标点符号隔开的部分。当一个字符串的单词用完了,就继续使用另一个更长的字符串中的剩余部分。

举个例子,如果输入的字符串是‘This. is. a, test’和‘My mom makes a mean pasta sauce’,那么生成的新字符串会是‘This My is mom a makes test a mean pasta sauce’。

如果有人能给我一些建议,我会非常感激。我正在学习编程,但我现在的代码完全不工作。

2 个回答

0

这个 random 模块非常好用,可以帮助我们完成这个任务。

我使用 string 模块来去掉所有的标点符号。

import random
import string
sentence_one = raw_input('Enter the first sentence! ').translate(None, string.punctuation)
sentence_two = raw_input('Enter the second sentence! ').translate(None, string.punctuation)
mylist1 = sentence_one.split()
mylist2 = sentence_two.split()
mylist3 = mylist1 + mylist2
random.shuffle(mylist3)
randomsentence = ' '.join(mylist3)
print randomsentence

运行后:

Enter the first sentence! one, two, three
Enter the second sentence! four! five! six!
three two four six one five # Well it could be anything really, this is randomised.
0

可以看看Python的itertools模块的文档。特别是里面的itertools.izip_longest函数,它正好可以解决你提到的问题。

根据文档的说明:

itertools.izip_longest(*iterables[, fillvalue])

这个函数会创建一个迭代器,从每个可迭代对象中收集元素。如果这些可迭代对象的长度不一样,缺少的值会用fillvalue来填充。迭代会一直进行,直到最长的那个可迭代对象的元素都用完。

如果其中一个可迭代对象可能是无限的,那么就应该用一些方法来限制调用的次数(比如用islice()或者takewhile())。如果没有指定,fillvalue的默认值是None。

撰写回答