gpt4 book ai didi

python - 如何使用另一个列表拆分列表

转载 作者:行者123 更新时间:2023-12-01 07:33:15 25 4
gpt4 key购买 nike

我有两个列表。两者都是经过排序的数字列表。说:

A = [1.1, 5.2, 12.3, 12.6]
B = [2.3, 2.7, 5.2, 11.1, 12.1, 15.6, 16.6]

对于 A 中的每个数字,我在 B 中找到最接近的值。例如

1.1 -> 2.3
5.2 -> 5.2
12.3 -> 12.1
12.6 -> 12.1

我现在想使用此映射将 B 拆分为列表列表。 A 中某个值映射到的每个点都被放置为区间的末尾。所以我明白了

listoflists = [[2.3], [2.7, 5.2], [11.1, 12.1]]

余数为:

remainder = [15.6, 16.6]

现在我需要将 listoflists 中的值转换为与 listoflists 中前一个列表末尾的值的距离。我们假设有一个隐含值 0。所以:

transformed_values = [[2.3], [0.4, 2.9], [5.9, 6.9]]

余数类似地变换为:

transformed_remainder = [3.5, 4.5]

我一直在努力编写合理且正确的代码来输出 transformed_valuestransformed_remainder

How can you compute transformed_values and transformed_remainder efficiently from the variables A and B? Perhaps it can be done directly without computing listoflists at all?

我确实有代码可以找到最接近的值:

def find_nearest(array, value):
idx = np.searchsorted(array, value, transformed_remainderside="left")
if idx > 0 and (idx == len(array) or math.fabs(value - array[idx-1]) < math.fabs(value - array[idx])):
return array[idx-1]
else:
return array[idx]

(我需要经常这样做,所以也许使用 numpy 的开销太大,使用 bisect 会更好。)

最佳答案

我假设您不需要 listoflists 方面的帮助。这就是进行转换的方法。

transformed_values = (
listoflists[0]
+ [[a - prior[-1], b - prior[-1]]
for (a, b), prior in zip(listoflists[1:], listoflists[:-1])]
)
transformed_remainder = [r - listoflists[-1][-1] for r in B[(len(A) + 1):]]

关于python - 如何使用另一个列表拆分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57119027/

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