Skip to main content
 首页 » 编程设计

Python:获取多维列表中的所有对和对的频率

2025年05月04日21zhujiabin

我的多维列表如下所示:

    mylist = [[13, 41, 3, 23, 12, 16], [12, 32, 30, 49, 3, 18],  
              [34, 12, 14, 24, 35, 20], [29, 28, 12, 44, 13, 4], 
              [31, 44, 6, 49, 5, 39]] 

在一些列表中有对(数字相差 1)。不在每个列表中:第一个列表中的 (12,13)​​,第三个列表中的 (34,35),第四个列表中的 (28,29) 和 (12,13)​​。

我想要的是获取所有找到的对,这些对应根据频率(升序)保存在(排序的)列表中。在我上面的例子中,它看起来如下:

    fr_list = [[12,13],[12,13],[28,29],[34,35]] 

我写了下面的代码来找到对

    def find_pairs(lst, key): 
            return [(a,b) for a,b in permutations(lst, 2) if a-b==key] 

然后,我尝试了这个:

    fr_list = [find_pairs(mylist,1) for x in mylist] 

但是,我收到以下错误消息:

    Traceback (most recent call last): 
      File "<stdin>", line 1, in <module> 
      File "<stdin>", line 1, in <listcomp> 
      File "<stdin>", line 2, in find_pairs 
      File "<stdin>", line 2, in <listcomp> 
    TypeError: unsupported operand type(s) for -: 'list' and 'list' 

有人能帮帮我吗?谢谢。

请您参考如下方法:

您的代码在功能上是正确的,但您最终的列表理解不正确。它应该是 fr_list = [find_pairs(x,1) for x in mylist]。在您的情况下,您尝试将列表列表放入 find_pairs 函数中。但是,将 mylist 更改为 x 意味着您要遍历每个嵌套列表,而不是每个嵌套列表的整个列表列表。