0

我知道这个问题已经被问过很多很多次了。我明白为什么修改我正在迭代的列表不起作用。我想出了一个想法,但我想就它是否会崩溃,以及更好的,也许更 Pythonic 的方式来做它可能是反馈。我想取一个字符串并每 3 个单词插入一个单词“like”。

def hedge(string):
a = string.split()
keep_up = 0                       # To 'keep up' with the changing length of a
for i in range(3, len(a), 3):
a.insert(i+keep_up, 'like')
    keep_up += 1                  # Add 1 to keep_up every time 'like' is added, because this 
return ' '.join(a)                # messes with the index

这将返回一个字符串,如:

他的手掌像汗水一样,膝盖无力,像手臂一样沉重。就像他的毛衣已经吐了一样,就像妈妈的意大利面一样。

创建一个新变量似乎不是最简单的方法。有没有更好的办法?

注意:在找到这个解决方案之前,我尝试了几种不同的方式迭代“a”的副本,但由于“a”的长度仍在变化,我看不出这会有什么帮助。

在此先感谢,阿德里安

4

1 回答 1

1

使用enumerateand yield,您的代码可以更改如下:

def hedge(s):
    for i, word in enumerate(s.split()):
        if i > 0 and i % 3 == 0:
            yield 'like'
        yield word

sentence1 = "his palms are sweaty, knees weak, arms are heavy. there's vomit on his sweater already, mom's spaghetti."
sentence2 = "his palms are like sweaty, knees weak, like arms are heavy. like there's vomit on like his sweater already, like mom's spaghetti."
assert ' '.join(hedge(sentence1)) == sentence2
于 2013-08-28T04:17:57.030 回答