用另一个词替换列表中的词

-2 投票
3 回答
912 浏览
提问于 2025-04-18 07:54

我有一个程序,它会把一个句子拆分成一个叫做'words'的列表。比如说,我输入一个句子“我爱牛”,程序就会把它拆分成'words'这个列表。这个列表看起来像这样:words = ['i','hate','cows']。这部分我已经搞定了,但我想把像'i'这样的词替换成其他词,比如'your'。这是我正在尝试让它工作的代码:

def word_identify(words):
parts_of_speech = []
for word in words:
    if word == 'help':
        help_info(help)
    if word == '?':            
        print "This is a question."
        return 12
    elif word == 'why':
        print "This is a question!"
        return 12
    elif word  == 'am':
        word = 'are'
        return 10
    elif word == 'i':
        word = ' you'
        return 10
    else:
        #new_words.append(word)
        return 1 

任何帮助都非常感谢。返回的内容需要被忽略,因为它会触发程序的另一部分。我希望'words'这个列表能更新为新词。

非常感谢!!!

编辑 谢谢大家的回复!@Nammi,你真的很有帮助,但如果你能告诉我怎么解决这个问题,让它在列表中同时出现两个词时只替换其中一个,那就太好了!非常感谢大家!

仍然存在的问题:

How are you? I am sad
Why are you am sad?
None
Am I sad
Why are are i sad? 
None

不要在意重复的'are',这个我已经处理过了。

3 个回答

0

与其使用for-in循环,你可以通过索引来循环遍历。用索引给列表中的元素赋值时,会把原来的值替换成新的值。所以在你修改完之后,不需要再返回这个列表。

for i in range(0, len(words)):
    if (words[i] == "i"):
        words[i] = "you"
    elif (words[i] == "am"):
        words[i] = "are"
....
1

使用map函数非常简单。

words = ['i','hate','cows']
new_words = map(lambda x: 'you' if x == 'i' else x, words)
print new_words  #prints ['you', 'hate', 'cows']

这个函数接收一个大小为N的输入列表,然后输出一个长度完全相同的列表。里面的lambda函数会对输出数组中的每个元素进行转换。

3

你可以使用列表推导式,像这样:

new = ['you' if word == 'i' else word for word in words]

这段代码运行的结果是:

>>> words = ['i','hate','cows']
>>> new = ['you' if word == 'i' else word for word in words]
>>> new
['you', 'hate', 'cows']
>>> 

或者,如果你想要一个更 详细 的解决方案,

可以直接使用一个基本的 for 循环:

words = ['i','hate','cows']
new = []
for i in words:
    if i == 'i':
        new.append('you')
    elif i == 'am':
        new.append('are')
    elif i == 'why' or i == '?':
        print "This is a question!"
    else:
        new.append(i)

这段代码运行的结果是:

>>> words = ['i','hate','cows']
>>> new = []
>>> for i in words:
...     if i == 'i':
...         new.append('you')
...     elif i == 'am':
...         new.append('are')
...     elif i == 'why' or i == '?':
...         print "This is a question!"
...     else:
...         new.append(i)
... 
>>> new
['you', 'hate', 'cows']
>>> 

撰写回答