我有一个列表,其中包含在word tokenizer上应用postag后获得的元组列表。样本是
lis=[[[('This', 'DT') ('PM', 'NNP') ('Doctor', 'NNP'), ('Sambit', 'NNP'), ('Patra', 'NNP'), ('Spokesperson', 'NNP')]],[[('Can', 'MD'), ('Media', 'NNP'), ('lambast', 'VB'), ('Sonia', 'NNP'), ('Gandhi', 'NNP'), ('up', 'RP'), ('Dalit', 'NNP'), ('Sitaram', 'NNP'), ('Dalit', 'NNP'), ('President', 'NNP')]]]
我想在元组的第二个元素是'NNP'时删除元组.OutputList看起来像这样;
Final_lis=[[[('This', 'DT')]],[[('Can', 'MD'), ('lambast', 'VB'), ('up', 'RP')]]]
我正在编写代码:
print(len(lis[0][1])) #to print the length of first list containing tuples
f_list=[]
for i in range(0,len(lis)):
for j in range(len(lis[l])):
if lis[i][j][1]!='NNP':
f_list.append(lis[i][j])
但它显示错误
Traceback (most recent call last):
File "<ipython-input-51-02562b867f97>", line 1, in <module>
runfile('C:/Users/meet/t1.py', wdir='C:/Users/meet')
File "C:\Users\meet\Anaconda3\lib\site-
packages\spyder\utils\site\sitecustomize.py", line 880, in runfile
execfile(filename, namespace)
File "C:\Users\meet\Anaconda3\lib\site-
packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/meet/t1.py", line 9, in <module>
print(len(lis[0][1]))
IndexError: list index out of range
答案 0 :(得分:1)
试试这个:
flist = []
for j in lis:
for k in j:
for l in k:
if l[1] != 'NNP':
flist.append(l)
print(flist)
这为您提供了单个列表,而不是列表列表。除了lis
之外,还有一些问题,因为某些元组之间没有,
。
答案 1 :(得分:0)
错误消息表明您正在尝试访问对象的第一个列表的第二个(零索引)元素,而此列表只有一个元素。 您的原始代码有一个循环到少数,因此它将始终输出所有列表,因为将列表与字符串进行比较。
如果您想保留以前的结构(可能会保留空列表),以下代码应该会产生预期的输出:
f_list = [
[
[
(val, tag) for val, tag in inner_list if tag != 'NNP'
] for inner_list in outer_list
]
for outer_list in lis
]
# result: [[[('This', 'DT')]], [[('Can', 'MD'), ('lambast', 'VB'), ('up', 'RP')]]]
如果您只需要一个元组列表,则以下代码段将给出预期结果:
f_list = [
(val, tag)
for outer_list in lis
for inner_list in outer_list
for val, tag in inner_list
if tag != 'NNP'
]
# result: [('This', 'DT'), ('Can', 'MD'), ('lambast', 'VB'), ('up', 'RP')]
答案 2 :(得分:0)
这会给你你想要的东西:
result = [[filter(lambda x: x[1] != 'NNP', a[0])] for a in lis]