假设我有这样的东西:
from collections import namedtuple
Obj = namedtuple('Obj', ['x', 'y'])
items = [Obj(1,1), Obj(1,2), Obj(1,3), Obj(1,3), Obj(1,3)]
有没有办法count
针对特定的属性?我希望你能像这样做:
test = [ obj for obj in items if items.count(obj.y) > 1 ]
但是,这会给出一个空列表,而不是包含元素Obj(1,3)
的列表。有人有单线解决方案吗?你知道吗
分别创建计数的映射;使用^{} 可以很容易地实现这一点:
演示:
要从列表中多次出现
items
的obj
获取所有对象,请在一行中执行以下操作:这给了我:
然而,注意这个“算法”是
O(n**2)
,这不是很有效。相反,制作一个字典(你可以用collections.defaultdict(list)
来简化它):然后得到大于一的值:
如果我知道你想做什么,那就是收集具有相同y值的对象数的项
一个简单的方法是
然后,你需要的测试
相关问题 更多 >
编程相关推荐