【问题标题】:How to check a list of lists against a list of lists and count their overlaps? (Python)如何根据列表列表检查列表列表并计算它们的重叠? (Python)
【发布时间】:2020-07-03 20:58:48
【问题描述】:

我有一个列表 a 包含 100 个列表和一个列表 x 包含 4 个列表(所有列表长度相同)。我想测试a 中的列表与x 中的列表。我的目标是找出a 中的数字“触摸”x 中的数字的频率。换句话说,所有列表都是一条线上的点,a 中的线不应接触(或交叉)x 中的线。

编辑

在代码中,我首先针对 x1 测试 a(例如 a1、a2 ... a100)中的每一行,然后针对 x2、x3 和 x4 进行测试。条件和计数器检查 a 是否触及 x。注意:我对计算 a1 中的 多少 个项目不感兴趣,例如 touch x1。一旦 a1 和 x1 接触,我就会数一下,然后可以移动到 a2,依此类推。

但是,计数器没有正确更新。它似乎没有针对所有x 测试a。关于如何解决这个问题的任何建议?这是我的代码。

编辑

我已经更新了代码,以便更容易复制问题。


x = [[10, 11, 12], [14, 15, 16]]
a = [[11, 10, 12], [15, 17, 20], [11, 14, 16]]

def touch(e, f):
    e = np.array(e)
    f = np.array(f)
    lastitems = []
    counter = 0
    for lst in f:
        if np.all(e < lst): # This is the condition
            lastitems.append(lst[-1]) # This allows checking the end values 
        else:
            counter += 1
    c = counter
    return c

touch = touch(x, a)
print(touch)

我得到的结果是:

2

但我希望这样:

1
2

【问题讨论】:

  • 如果没有xa,我们将无法重现您的结果
  • 实际文件很大,但我添加了一个示例,说明xa 的样子。
  • 现在,touch(x, a) 给了2。不知道你为什么在数据框中提到“爆炸”。如果你真的需要帮助,请编写易于复现的代码!
  • @Jorge:抱歉,你是对的。已更新代码并编辑了问题。希望现在更容易了。

标签: python-3.x pandas numpy conditional-statements counter


【解决方案1】:

我不确定您期望的结果究竟是什么,您的示例和描述仍然不清楚。无论如何,这就是我猜你想要的。如果您想了解更多详细信息,可以取消注释某些行,即带有#的行

i = 0
for j in x:
    print("")
    #print(j)
    counter = 0
    for k in a:
        inters = set(j).intersection(k) 
        #print(k)
        #print(inters)
        if inters:
            counter += 1
            #print("yes", counter)
        #else:
            #print("nope", counter)
    print(i, counter)
    i += 1

打印出来的

0 2

1 2

【讨论】:

  • 我猜索引 0 和 1 令人困惑。所以我已经从预期的输出中删除了它们。
猜你喜欢
  • 2013-04-24
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 2019-02-28
  • 2020-07-19
  • 2016-03-04
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多