我有一个像这样的单词列表:
list = ['I', 'did', 'not', 'enjoy', 'the', 'movie']
因此,目标是,如果单词列表中出现“not”字样,则所有下列单词应与左侧的“NOT_”连接。例如,上面列表的输出应为:
output_list = ['I', 'did', 'not', 'NOT_enjoy', 'NOT_the', 'NOT_movie']
答案 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中列表的良好变量名。