从元组列表中删除项

时间:2016-04-03 10:40:37

标签: python-2.7 python-3.x nlp

L = [('The', 'DT'), ('study', 'NN'), ('guide', 'NN'), ('does', 'VBZ'), ('not', 'VBZ'), ('discuss', 'VBZ'), ('much', 'NN'), ('of', 'IN'), ('the', 'DT'), ('basics', 'NN'), ('of', 'IN'), ('ethics.', 'NN')]

我想删除除'NN'和'DT'以外的标签的元组 我试过pop方法它不起作用。尝试解压缩两个元组,但元组是不可变的。那么我该如何删除它们呢。

2 个答案:

答案 0 :(得分:0)

您必须弹出或删除其索引以使其正常工作,例如,您可以L.pop(('The', 'DT'))代替L.pop(L.index(('The', 'DT')))

没有经过测试,但如果我对你想要的东西没有错误的认识,这应该可行。

这种方式构建了一个你想要删除的索引列表,然后将它们删除(否则你会在查看列表时改变列表的大小,这对你来说真的有用)。

invalid_tuples = []
for i, t in L:
    if t[1] not in ('NN', 'DT'):
        invalid_tuples.append(i)
for i in invalid_tuples:
    del L[i]

或者作为一线解决方案:

[i for i in L if i[1] in ('NN', 'DT')]

答案 1 :(得分:0)

>>> L = [('The', 'DT'), ('study', 'NN'), ('guide', 'NN'), ('does', 'VBZ'), ('not', 'VBZ'), ('discuss', 'VBZ'), ('much', 'NN'), ('of', 'IN'), ('the', 'DT'), ('basics', 'NN'), ('of', 'IN'), ('ethics.', 'NN')]
>>> [(word, tag) for word, tag in L if tag not in ['DT', 'NN']]
[('does', 'VBZ'), ('not', 'VBZ'), ('discuss', 'VBZ'), ('of', 'IN'), ('of', 'IN')]
>>> [(word, tag) for word, tag in L if tag in ['DT', 'NN']]
[('The', 'DT'), ('study', 'NN'), ('guide', 'NN'), ('much', 'NN'), ('the', 'DT'), ('basics', 'NN'), ('ethics.', 'NN')]