【问题标题】:Most efficient way to compare list data比较列表数据的最有效方法
【发布时间】:2017-01-25 00:37:00
【问题描述】:

我正在使用 python 并尝试比较列表之间的数据。列表A 将包含如下所示的数据:

A=['perspectiveA', 'perspectiveB', 'perspectiveC']

列表B 将包含如下所示的数据:

B=['listB.data.perspectiveA', 'listB.data.perspectiveB', 'listB.data.perspectiveC']

我正在尝试确保列表A 中收集的数据包含在列表B 中收集的数据中。是通过使用嵌套的 for 循环来做到这一点的唯一方法吗?我不想简单地查看来自A 的项目是否在来自B 的项目之一中,但我需要确保1:1 的相关性。例如,列表 B 需要包含一项包含“perspectiveA”但只有一项。

【问题讨论】:

  • 使用列表会迫使你在这里效率低下。
  • 我还没有尝试过任何东西,但到目前为止我的想法是我可以从列表 B 中的项目中创建一个新列表,但要去掉“。”直到最后一个元素,然后将两个列表作为集合进行比较以确保它们相同。只是觉得这有点像创可贴的解决方案。

标签: python arrays list set compare


【解决方案1】:

将两个列表都转换为集合:

set('listB.data.' + x for x in A) == set(B)
# True

【讨论】:

    【解决方案2】:

    为什么不将其中一个列表(列表 A,因为听起来该列表中的数据是唯一的)中的元素移动到字典中,因为搜索该数据类型要快得多,并且您可以将计数器保留在那里还有:

    listA = ['perspectiveA', 'perspectiveB', 'perspectiveC']
    listB = ['listB.data.perspectiveA', 'listB.data.perspectiveB', 'listB.data.perspectiveC']
    dictA = {a:0 for a in listA}
    
    >>> dictA
    {'perspectiveA': 0, 'perspectiveB': 0, 'perspectiveC': 0}
    
    for b in listB:
        value = b.split(".")[2]
        if value in dictA:
            dictA[value] += 1
    

    任何值不是 1 的字典元素要么不显示,要么重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 2014-06-20
      • 2021-01-14
      • 2020-08-06
      相关资源
      最近更新 更多