我有一个程序正在取一个句子并将每个单词分成一个名为“单词”的列表。这看起来像我输入一个像“我爱奶牛”的句子,程序会把它分成“单词”列表。该列表看起来像words = ['i','hate','cows']
。我有那个部分,但我希望能够用'你'之类的其他单词替换像'i'这样的单词。这是我试图开始工作的一大块代码:
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
任何帮助将不胜感激。返回需要我忽略,它们触发程序的另一部分。我希望用新单词更新列表'单词'。
非常感谢!!!
修改 谢谢你们的回复!@Nammi你们非常乐于助人,但是如果你告诉我如何解决它的问题,只有当它们都出现在列表中时才会替换它们中的一个!非常感谢你们!
仍然存在的问题:
How are you? I am sad
Why are you am sad?
None
Am I sad
Why are are i sad?
None
不要注意我已经处理过的双重'是'。
答案 0 :(得分: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']
>>>
答案 1 :(得分: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函数将转换应用于输出数组的每个元素。
答案 2 :(得分:0)
您可以通过索引循环,而不是使用 for-in 循环。 使用索引分配列表元素会使用新值覆盖列表中的任何值。因此,您无需在进行更改后返回列表。
for i in range(0, len(words)):
if (words[i] == "i"):
words[i] = "you"
elif (words[i] == "am"):
words[i] = "are"
....