如何创建一个字典,其键为 (i,j) 整数对且 i < j

ser*_*208 3 python combinations dictionary nested-loops

我打算创建数千个整数对,对它们进行编号并将它们存储在字典中。给定一个数字n,我的目标是生成(i,j)这样的每一对i<j

例如,如果n=4,则对将是,则字典将如下所示{(0, 1): 0, (0, 2): 1, (0, 3): 2, (1, 2): 3, (1, 3): 4, (2, 3): 5}

n我可以通过使用嵌套 for 循环来生成这个字典,但是当很大时它效率不高。有人可以帮助我比现在更快地执行此操作吗?

d={}
n=4
temp =0

for i in range(n):
    for j in range(n):
        if i <j:
            d.update({(i,j): temp})
            temp+= 1
Run Code Online (Sandbox Code Playgroud)

moz*_*way 6

这是一项完美的工作,itertools.combinations因为它只会产生所需的组合:

from itertools import combinations

n = 4
out = {k:v for v,k in enumerate(combinations(range(n), 2))}
Run Code Online (Sandbox Code Playgroud)

输出:{(0, 1): 0, (0, 2): 1, (0, 3): 2, (1, 2): 3, (1, 3): 4, (2, 3): 5}

使用您的代码

请注意,您可以重新编写代码以仅生成所需的组合:

d={}
n=4
temp = 0

for j in range(n):
    for i in range(j):
        d[(i,j)] = temp
        temp += 1

# {(0, 1): 0, (0, 2): 1, (1, 2): 2, (0, 3): 3, (1, 3): 4, (2, 3): 5}
Run Code Online (Sandbox Code Playgroud)