gpt4 book ai didi

python - 当两个相邻值差大于阈值时如何将排序列表拆分为子列表

转载 作者:太空狗 更新时间:2023-10-30 00:13:57 25 4
gpt4 key购买 nike

输入:

  • 排序列表,像这样:[1,2,3,8,10,15,16,17,18,22,23,27,30,31]
  • 一个阈值,像这样:max_diff = 2

预期输出:

  • 子列表列表;每个子列表包含相邻差异小于 max_diff 的值,如下所示:[[1, 2, 3], [8, 10], [15, 16, 17, 18], [22, 23 ], [27], [30, 31]]

这是我的做法,我想知道是否有更好的方法来做到这一点。

test_list = [1,2,3,8,10,15,16,17,18,22,23,27,30,31]
max_diff = 2

splited_list = []
temp_list = [test_list[0]]
for i in xrange(1,len(test_list)):
if test_list[i] - temp_list[-1] > max_diff:
splited_list.append(temp_list)
temp_list = [test_list[i]]
else:
temp_list.append(test_list[i])
if i == len(test_list) -1:
splited_list.append(temp_list)

print splited_list

最佳答案

您可以在列表理解中使用 enumeratezip 函数来查找值差大于 2 的元素的索引,然后根据索引拆分您的列表列表:

>>> li =[1, 2, 3, 8, 10, 15, 16, 17, 18, 22, 23, 27, 30, 31]
>>> inds=[0]+[ind for ind,(i,j) in enumerate(zip(li,li[1:]),1) if j-i>2]+[len(li)+1]
>>> [li[i:j] for i,j in zip(inds,inds[1:])]
[[1, 2, 3], [8, 10], [15, 16, 17, 18], [22, 23], [27], [30, 31]]

关于python - 当两个相邻值差大于阈值时如何将排序列表拆分为子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32198966/

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