如何修改术语列表中特定术语后的所有术语?

时间:2015-09-30 15:03:49

标签: python list

我有一个像这样的单词列表:

 list = ['I', 'did', 'not', 'enjoy', 'the', 'movie']

因此,目标是,如果单词列表中出现“not”字样,则所有下列单词应与左侧的“NOT_”连接。例如,上面列表的输出应为:

output_list = ['I', 'did', 'not', 'NOT_enjoy', 'NOT_the', 'NOT_movie']

4 个答案:

答案 0 :(得分:4)

如果您只想开始追加" NOT"在您看到“不是”之后,这里的算法可能会有效:

seen_not = False
output_list = []
for item in input_list:
    if seen_not:
        output_list.append("NOT_" + item)
    else:
        output_list.append(item)

    if item == "not":
        seen_not = True

我们构建一个新列表,逐个添加旧列表中的项目。如果我们已经看过“不是”。在旧列表中,我们只需将修改后的单词附加到新列表中即可。

编辑:我将该代码转换为名为mod_list的函数,并在python解释器中尝试了它:

>>> mod_list(['I', 'did', 'not', 'enjoy', 'the', 'movie'])
['I', 'did', 'not', 'NOT_enjoy', 'NOT_the', 'NOT_movie']

答案 1 :(得分:2)

如何搜索not的索引,然后在索引后更改列表中的部分?

words = ['I', 'did', 'not', 'enjoy', 'the', 'movie']

try:
    idx = words.index('not') + 1
except ValueError:
    pass
else:
    words[idx:] = map(lambda s: 'NOT_' + s, words[idx:])

print words

结果:

['I', 'did', 'not', 'NOT_enjoy', 'NOT_the', 'NOT_movie']

答案 2 :(得分:1)

此程序似乎按您的要求执行:

def main():
    array = ['I', 'did', 'not', 'enjoy', 'the', 'movie']
    output_array = modify(array)
    print(output_array)

def modify(array):
    iterator, output_array = iter(array), []
    for word in iterator:
        output_array.append(word)
        if word.upper() == 'NOT':
            break
    for word in iterator:
        output_array.append('NOT_' + word)
    return output_array

if __name__ == '__main__':
    main()

您可以查看Ideone.com上same program的输出。

答案 3 :(得分:0)

旗帜,两个(错误) - >一个循环可以解决它。

  
      
  • 如果没有找到'not'的位置,则flag为false;

  •   
  • 如果flag为false,则输出不带'NOT_'的单词,否则带有前缀'NOT _'。

  •   

这里是参考代码(不够好,但保留它以提醒):

# -*- coding: utf-8 -*
# Filename: test.py

__author__ = 'piratf'

flagWord = 'not'
prefixWord = 'NOT_'

srcList = ['I', 'did', 'not', 'enjoy', 'the', 'movie']

flag = -1;
for x in range(0, len(srcList)):
    if srcList[x] == flagWord:
        flag = x;
        break;
if (flag != -1):    
    for x in range(flag + 1, len(srcList)):
        srcList[x] = prefixWord + srcList[x];

print (srcList)

此外,list可能不是python中列表的良好变量名。