gpt4 book ai didi

python - 根据python中的数字范围对值进行分组

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

我有一个列表如下:

[(220921998, 2426),
(220921999, 2427),
(220922000, 2428),
(220922001, 2429),
(220922563, 2991),
(220922564, 2992),
(220922565, 2993),
(220922566, 2994),
(220922575, 3003),
(220923958, 4386),
(220924161, 4589),
(220924170, 4598),
(220924171, 4599),
(220924172, 4600),
(220924173, 4601),
(220924912, 5340),
(220926340, 6768),
(220926341, 6769),
(220926342, 6770),
(220926343, 6771),
(220926344, 6772),
(220927052, 7480),
(220927053, 7481),
(220927054, 7482),
(220927055, 7483),
(220927056, 7484),
(220927069, 7497),
(220927071, 7499)]

我想根据第二个数字向列表中添加一个字符串。如果列表中的第二个数字与其他第二个数字相差 20 左右,它们将被分配相同的“项目”名称。见下文:

[(220921998, 2426,project1),
(220921999, 2427,project1),
(220922000, 2428,project1),
(220922001, 2429,project1),
(220922563, 2991,project2),
(220922564, 2992,project2),
(220922565, 2993,project2),
(220922566, 2994,project2),
(220922575, 3003,project3),
(220923958, 4386,project4),
(220924161, 4589,project5),
(220924170, 4598,project5),
(220924171, 4599,project5),
(220924172, 4600,project5),
(220924173, 4601,project5),
(220924912, 5340,project6),
(220926340, 6768,project7),
(220926341, 6769,project7),
(220926342, 6770,project7),
(220926343, 6771,project7),
(220926344, 6772,project7),
(220927052, 7480,project8),
(220927053, 7481,project8),
(220927054, 7482,project8),
(220927055, 7483,project8),
(220927056, 7484,project8),
(220927069, 7497,project8),
(220927071, 7499,project8)]

我已经尝试过 groupby,但找不到一种方法来处理范围。任何帮助都会很棒。谢谢

最佳答案

使用itertools.groupby具有记住最后一项并与当前项核对的关键功能。

lst = [(220921998, 2426),
(220921999, 2427),
(220922000, 2428),
(220922001, 2429),
(220922563, 2991),
(220922564, 2992),
(220922565, 2993),
(220922566, 2994),
(220922575, 3003),
(220923958, 4386),
(220924161, 4589),
....]

class Delta:
def __init__(self, delta):
self.last = None
self.delta = delta
self.key = 1
def __call__(self, value):
if self.last is not None and abs(self.last - value[1]) > self.delta:
# Compare with the last value (`self.last`)
# If difference is larger than 20, advance to next project
self.key += 1
self.last = value[1] # Remeber the last value.
return self.key

import itertools
for key, grp in itertools.groupby(lst, key=Delta(20)):
for tup in grp:
print(tup + ('project{}'.format(key),))

如果您使用 Python 3.x,则可以改用以下函数(参见 nonlocal):

def Delta(delta):
last = None
key = 1
def keyfunc(value):
nonlocal last, key
if last is not None and abs(last - value[1]) > delta:
key += 1
last = value[1]
return key
return keyfunc

关于python - 根据python中的数字范围对值进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437394/

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