用另一个词替换列表中的词
我有一个程序,它会把一个句子拆分成一个叫做'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']
>>>