gpt4 book ai didi

python - 按特定顺序生成元组列表

转载 作者:行者123 更新时间:2023-11-28 21:37:42 25 4
gpt4 key购买 nike

所以这是我的问题。我有 2 个频率,并生成附近频率元组的列表。

f1 = 20
f2 = 50
f = [(a, b) for a in range(f1-3, f1+4) for b in range(f2-3, f2+4)]

输出:

[(17, 47), (17, 48), (17, 49), (17, 50), (17, 51), (17, 52), (17, 53), (18, 47), (18, 48), (18, 49), (18, 50), (18, 51), (18, 52), (18, 53), (19, 47), (19, 48), (19, 49), (19, 50), (19, 51), (19, 52), (19, 53), (20, 47), (20, 48), (20, 49), (20, 50), (20, 51), (20, 52), (20, 53), (21, 47), (21, 48), (21, 49), (21, 50), (21, 51), (21, 52), (21, 53), (22, 47), (22, 48), (22, 49), (22, 50), (22, 51), (22, 52), (22, 53), (23, 47), (23, 48), (23, 49), (23, 50), (23, 51), (23, 52), (23, 53)]

现在我根据它到 f1 和 f2 的距离来排序。以上面的例子为例:

[(20, 50), (19, 50), (20, 49), (21, 50), (20, 51), (21, 51), ..., (15, 45), (25, 55)]

lambda 函数可以完成这项工作:

sorted(f, key=lambda x: abs(f1-x[0]) + abs(f2-x[1])) 

输出:

[(20, 50), (19, 50), (20, 49), (20, 51), (21, 50), (18, 50), (19, 49), (19, 51), ...]

问题 1: 如何修改 lambda 函数以获得 (18, 50) 之前的值 (21,51)(每个频率上的距离为 1 优于距离为2 在一个频率上)?

问题2:对列表进行排序非常耗时(这里只是一个49个elts的列表,但实际上它可以有数千个元组)。有没有办法直接生成最终列表,从而跳过排序步骤?

编辑:对问题 2 的澄清我想直接生成最终列表。我能想到的唯一解决方案有点重:而不是:

f = [(a, b) for a in range(f1-3, f1+4) for b in range(f2-3, f2+4)]

使用:

f = [(f1, f2)] + [(a, b) for a in range(f1, f1+2) for b in range(f2, f2+2)] + [(a, b) for a in range(f1, f1-2, -1) for b in range(f2, f2-2, -1)] + ... Distance of 2 + Distance of 3 + so on

除了粗线条之外,我创建了可以通过 list(set(f)) 消除的重复项,但随后我失去了不排序所获得的时间...

谢谢。

最佳答案

关于问题 1,您可以使用几何距离度量:

import math
...
sorted(f, key=lambda x: math.sqrt(pow(f1-x[0],2) + pow(f2-x[1],2)))

关于python - 按特定顺序生成元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49109485/

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