在一个序列中进行所有双向比较的最适合的方法是什么?

2024-10-02 08:31:05 发布

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

在一个序列中进行所有双向比较的最有吸引力的方法是什么?你知道吗

到目前为止我所尝试的:

[compare(i, j) for i in sequence for j in sequence]

太可怕了。进行n^2而不是n/2(n-1)比较。还将项目与自身进行比较。你知道吗

l = []
for i in xrange(1,len(sequence)):
    for j in xrange(i-1):
        l.append(compare(sequence[i], sequence[j]))

丑陋的。你知道吗

[compare(i, j) for i, j in permuations(sequence, 2)]

可能是这个,但不确定是不是脓性的。你知道吗


Tags: 项目方法inforlen序列双向compare
2条回答

怎么样:

[compare(seq[k], i) for k in range(len(seq)) for i in seq[k+1:]]

这与您的第二个代码片段遵循相同的比较模式。你知道吗

下面是一个示例的变体(嵌套for循环,运行时间:(n-1)n/2),使用enumerate

seq = (1, 2, 4, 8, 16, 32, 64)

def compare(a, b):
    print('%s ~ %s' % (a, b))

if __name__ == '__main__':
    for i, item in enumerate(seq, start=1):
        for other in seq[i:]:
            compare(item, other)

输出:

1 ~ 2
1 ~ 4
1 ~ 8
1 ~ 16
1 ~ 32
1 ~ 64
2 ~ 4
2 ~ 8
2 ~ 16
2 ~ 32
2 ~ 64
4 ~ 8
4 ~ 16
4 ~ 32
4 ~ 64
8 ~ 16
8 ~ 32
8 ~ 64
16 ~ 32
16 ~ 64
32 ~ 64

使用itertools,它可以写得更短:

import itertools

# ...

for a, b in itertools.combinations(seq, 2):
    compare(a, b)

相关问题 更多 >

    热门问题