将列表中的单词替换为另一个

时间:2014-05-29 03:07:35

标签: python regex python-2.7 python-3.x

我有一个程序正在取一个句子并将每个单词分成一个名为“单词”的列表。这看起来像我输入一个像“我爱奶牛”的句子,程序会把它分成“单词”列表。该列表看起来像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

不要注意我已经处理过的双重'是'。

3 个答案:

答案 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"
....