gpt4 book ai didi

python - 如何在列表列表中强制单独处理相同的元素?

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:08 25 4
gpt4 key购买 nike

我正在编写一个标记词性的程序,生成一个列表列表。这是程序中的示例函数:

phrase = [['he',''],['is', ''],['believed', ''],['to',''],['have',''],['believed','']]

def parts_tagger(input_list):
parts = []
for [x,y] in input_list:
prior_word = input_list[input_list.index([x,y]) - 1][0]
if x.startswith('be') and y == '' and prior_word == 'is':
parts.append([x,'passive'])
else:
parts.append([x,y])
return parts
print (parts_tagger(phrase))

当您运行这段代码时,Python 会找到条件适用的第一个单词(第一个“相信”)并正确标记它:

[['he', ''], ['is', ''], ['believed', 'passive'], ['to', ''], ['have', ''], ['believed', 'passive']]

但随后它以某种方式将相同的标签应用于列表中条件不适用的其他相同单词(第二个“相信”)。我究竟做错了什么?如何解决这个问题并强制 Python 单独处理列表中的每个项目?

最佳答案

问题出在这一行

prior_word = input_list[input_list.index([x,y]) - 1][0]

list.index返回第一个匹配项的索引。

Return the index in the list of the first item whose value is x. It is an error if there is no such item.

您可以使用 enumerate解决你的问题。将循环和下一行更改为这些。

for ind,[x,y] in enumerate(input_list): 
prior_word = input_list[ind - 1][0]

输出将如预期的那样

[['he', ''], ['is', ''], ['believed', 'passive'], ['to', ''], ['have', ''], ['believed', '']]

作为Shawn指出below (in a now deleted comment) ,我认为您需要从第二个索引开始,自己手动填充第一个元素的值。这是因为对于第一个元素,您将没有任何先前的值。有两种解决方法

  1. 从第二个元素开始

    for ind,[x,y] in enumerate(input_list[1:],start=1): 
  2. 在您的 body 中添加一个条件。

    for ind,[x,y] in enumerate(input_list): 
    prior_index = ind - 1
    if prior_index<0:
    # Do something
    break
    prior_word = input_list[ind - 1][0]

关于python - 如何在列表列表中强制单独处理相同的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32416294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com