python3.7中.append函数的自动化

2024-04-27 01:03:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套列表,长度从3到105不等。我想根据这个新列表创建一个包含原始列表中所有对的组合的列表,格式如下:从[7,5,6]到[7,5],[7,6],[5,6]

我使用了下面的代码,但是这对于列表中的105个值是不可行的。有没有一种算法可以使这个过程自动化?你知道吗

list3 = ([7,5,6], [6,9,7], [7,8,4], [2,4,6,7,9])
list4 = []
for sublist in list3:
    if len(sublist) == 3:
       list4.append([sublist[0], sublist[1])
       list4.append([sublist[0], sublist[2])
       list4.append([sublist[1], sublist[2])

Tags: 代码in算法列表forlenif过程
1条回答
网友
1楼 · 发布于 2024-04-27 01:03:45

您也许可以使用^{}来帮助生成给定最大范围的唯一对集。你知道吗

比如:

from itertools import combinations
list3 = ([7,5,6], [6,9,7], [7,8,4], [2,4,6,7,9])
list4 = []
for sublist in list3:
    for (i, j) in combinations(range(len(sublist)), 2):
       list4.append([sublist[i], sublist[j]])

为了提高效率,我建议使用列表理解:

list4 = [[sublist[i], sublist[j]] for sublist in list3 for (i, j) in combinations(range(len(sublist)), 2)]

更多关于列表的理解,而不是使用for循环附加到列表:Why is a list comprehension so much faster than appending to a list?


正如@chepner在下面的评论中指出的,combinations接受任何iterable,因此您可以简单地将其作为combinations的输入。我们也不需要附加单个元素。我们可以生成所需的组合,这些组合将生成一个列表,我们可以将所有内容连接在一起:

list4 = [t for sublist in list3 for t in combinations(sublist, 2)]

相关问题 更多 >