我的多维列表如下所示:
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 意味着您要遍历每个嵌套列表,而不是每个嵌套列表的整个列表列表。
