从列表生成具有相同属性的对

恩布比斯

假设您有一个项目列表,每个项目都有一组属性。

从具有相同属性的列表中生成所有对的有效算法是什么

例如,给定一个列表:

[('item1', {'a','b'}), ('item2', {'a'}), ('item3', {'c','b'}), ('item4', {'b'})]

我们应该返回可能的六对中的四对的以下列表:

('item1', 'item2') # both have attribute 'a'
('item1', 'item3') # both have attribute 'b'
('item1', 'item4') # both have attribute 'b'
('item3', 'item4') # both have attribute 'b'

现在,简单的方法将是首先生成所有可能的n(n+1)/2的列表,然后过滤掉没有相似属性的对,但是我怀疑这种方法效率不高,尤其是在对数非常大的情况下。

有什么建议?

亭子

我建议一个两阶段算法:

arr = [('item1', {'a','b'}), ('item2', {'a'}), ('item3', {'c','b'}), ('item4', {'b'})]

# 1. create map with for each attribute the list of items that have it
mp = {}
for lst in arr:
    for prop in lst[1]:
        if prop not in mp: mp[prop] = []
        mp[prop].append(lst[0])

# 2. for each attribute: add the pairs of items to the result set
result = set()
for prop in mp:
    items = mp[prop]
    # collect all pairs in items list
    for p1 in range(len(items)):
        for p2 in range(p1+1,len(items)):
            result.add((items[p1],items[p2]))

print (result)

输出:

{('item1', 'item4'), ('item1', 'item2'), ('item3', 'item4'), ('item1', 'item3')}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有几乎相同属性的模型

来自分类Dev

创建具有相同属性的方法

来自分类Dev

合并具有相同属性的元素

来自分类Dev

如何防止titan生成具有相同属性的重复记录?

来自分类Dev

使用LINQ从两个具有相同属性的不同列表创建对

来自分类Dev

如何获得具有相同属性的同一级别的元素或数据列表?

来自分类Dev

XML - XSLT 元素列表 - 连接具有相同属性值的元素

来自分类Dev

如何从具有相同属性值的列表中删除项目,其中计数大于 2

来自分类Dev

Javascript-添加具有不同值的相同属性

来自分类Dev

具有相同属性名称的AutoMapper TwoWay映射

来自分类Dev

GraphViz文件中具有相同属性的节点组

来自分类Dev

计算具有相同属性值的对象

来自分类Dev

在matplotlib中绘制具有相同属性的多个函数

来自分类Dev

Sparql查询:查找具有相同属性对象的对象

来自分类Dev

Rails:尝试渲染具有相同属性的用户的图像

来自分类Dev

如何排列具有相同属性值的对象数组?

来自分类Dev

如何创建具有相同属性\方法的组件

来自分类Dev

具有相同属性的元素的定位器

来自分类Dev

删除具有相同属性值的重复实体

来自分类Dev

CSS:调用具有相同属性的任何元素

来自分类Dev

解析具有相同属性但名称不同的JSON文件

来自分类Dev

如何添加具有相同属性的多个UIImageViews

来自分类Dev

计算具有相同属性的div并显示结果

来自分类Dev

TreeView删除具有相同属性的节点

来自分类Dev

LinQ GroupBy对具有相同属性的嵌套元素

来自分类Dev

如何选择具有相同属性的后续行

来自分类Dev

更少:2个具有相同属性的mixin

来自分类Dev

实体框架:具有相同属性的继承

来自分类Dev

Rails:尝试渲染具有相同属性的用户图像

Related 相关文章

  1. 1

    具有几乎相同属性的模型

  2. 2

    创建具有相同属性的方法

  3. 3

    合并具有相同属性的元素

  4. 4

    如何防止titan生成具有相同属性的重复记录?

  5. 5

    使用LINQ从两个具有相同属性的不同列表创建对

  6. 6

    如何获得具有相同属性的同一级别的元素或数据列表?

  7. 7

    XML - XSLT 元素列表 - 连接具有相同属性值的元素

  8. 8

    如何从具有相同属性值的列表中删除项目,其中计数大于 2

  9. 9

    Javascript-添加具有不同值的相同属性

  10. 10

    具有相同属性名称的AutoMapper TwoWay映射

  11. 11

    GraphViz文件中具有相同属性的节点组

  12. 12

    计算具有相同属性值的对象

  13. 13

    在matplotlib中绘制具有相同属性的多个函数

  14. 14

    Sparql查询:查找具有相同属性对象的对象

  15. 15

    Rails:尝试渲染具有相同属性的用户的图像

  16. 16

    如何排列具有相同属性值的对象数组?

  17. 17

    如何创建具有相同属性\方法的组件

  18. 18

    具有相同属性的元素的定位器

  19. 19

    删除具有相同属性值的重复实体

  20. 20

    CSS:调用具有相同属性的任何元素

  21. 21

    解析具有相同属性但名称不同的JSON文件

  22. 22

    如何添加具有相同属性的多个UIImageViews

  23. 23

    计算具有相同属性的div并显示结果

  24. 24

    TreeView删除具有相同属性的节点

  25. 25

    LinQ GroupBy对具有相同属性的嵌套元素

  26. 26

    如何选择具有相同属性的后续行

  27. 27

    更少:2个具有相同属性的mixin

  28. 28

    实体框架:具有相同属性的继承

  29. 29

    Rails:尝试渲染具有相同属性的用户图像

热门标签

归档