gpt4 book ai didi

python - 在一个序列中进行所有 2 向比较的最 Pythonic 方法是什么?

转载 作者:行者123 更新时间:2023-11-28 22:56:39 25 4
gpt4 key购买 nike

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

到目前为止我尝试了什么:

[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)]

这可能是它,但不确定它是否是 Pythonic。

最佳答案

这是您的一个示例的变体(嵌套 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)

关于python - 在一个序列中进行所有 2 向比较的最 Pythonic 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15237962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com