[英]Remove tuple from list containing list of tuples if certain condition is met
我有一個包含元組列表的列表,該列表是在詞標記器上應用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
嘗試這個:
flist = []
for j in lis:
for k in j:
for l in k:
if l[1] != 'NNP':
flist.append(l)
print(flist)
這給您一個列表,而不是列表。 除了你的lis
有一些問題,因為沒有,
一些元組之間。
錯誤消息表明您正在嘗試訪問對象的第一個列表的第二個(零索引)元素,而該列表只有一個元素。 您的原始代碼只有很少的一個循環,因此由於將列表與字符串進行比較,因此它將始終輸出所有列表。
如果要保留以前的結構,以下代碼應產生預期的輸出(盡管它可能會保留空列表):
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')]
這將給您您想要的:
result = [[filter(lambda x: x[1] != 'NNP', a[0])] for a in lis]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.