[英]Remove an element of list of tuples in Python based on condition
我在 Python 中有一个元组列表:
[(0, 1), (0, 2), (0, 3), (0, 4), (1, 3)......]
可以有更多的元组,其中第一个元素出现超过 3 次。
如果元组的第一个元素出现超过 3 次,如何删除元组。 这里 0,元组的第一个元素,以及第一个元素为 0 的元组出现 4 次。 这个元素(和其他,如果它们出现的话)应该从列表中删除,所以我们得到:
[(0, 1), (0, 2), (0, 3), (1, 3)......]
像这样的东西?
from collections import defaultdict
l = [(0, 1), (0, 2), (0, 3), (0, 4), (1, 3)]
d = defaultdict(list)
l2 = list(filter(lambda x: d[x[0]].append(x[0]) or len(d[x[0]]) < 4, l))
这是l2
:
[(0, 1), (0, 2), (0, 3), (1, 3)]
这个想法非常简单:您可以将不同的值累积到单独列表中元组的头部,存储在字典中,以便它们的计数对应于这些列表的长度。 filter
将当前值添加到对应列表中(追加返回始终为None
),然后检查出现的总数,如果大于 3,则返回 false。
利用append
的副作用(使用or
)允许使用列表推导而不是for
。
显然,您可以在完成过滤列表后立即删除d
。
下面的修复不使用任何defaultdict
或其他,但只使用基本的内置对象:
l = [(0, 1), (0, 2), (0, 3), (0, 4), (1, 3)]
o = []
d = {}
for t in l:
if t[0] not in d.keys():
d[t[0]] = 1
else:
d[t[0]] += 1
if d[t[0]] <= 3:
o.append(t)
print (o)
Output:
[(0, 1), (0, 2), (0, 3), (1, 3)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.