Python:将列表的批量元素分成预定义的组

Ziv*_*iva 4 python sorting grouping dictionary list

我有一个数值列表,例如my_list = [1,34,56,2,7,89,12,13,10,56,43,12,78,98,5,105,1,2]一组预定义的组:

group1 - values between 0 and 5,
group2 - values between 6 and 12,
group3 - values between 13 and 25,
group4 - values between 26 and 60,
group5 - values between 61 and inf,
Run Code Online (Sandbox Code Playgroud)

我想获得以下内容:

{1: [1,2,1,2,5],
2: [7,12,10,12],
3: [13],
4: [34,56,56,43],
5: [89,78,98,105]} 
Run Code Online (Sandbox Code Playgroud)

一种方法是创建一个for循环并检查每个元素的if-elif-else条件,如下所示:

for element in my_list:
    if 0 <= element <= 5:
       groups[1].append(element)
    elif 6 <= element <= 12:
       groups[2].append(element)
    elif ...
Run Code Online (Sandbox Code Playgroud)

有没有办法将列表中的元素分组更快更优雅?我正在使用的真实my_list很大,所以任何优化方式都会很棒!

Ash*_*ary 6

您可以使用bisect模块.

对于每个项目,my_list我们将找到它可以放入groups列表的索引,该索引将作为组号.

>>> import bisect

>>> groups = [0, 6, 13, 26, 61]
>>> output = {}
>>> for x in my_list:
...     index = bisect.bisect_right(groups, x)
...     output.setdefault(index, []).append(x)
...

>>>
>>> output
{1: [1, 2, 5, 1, 2],
 4: [34, 56, 56, 43],
 2: [7, 12, 10, 12],
 5: [89, 78, 98, 105],
 3: [13]}
Run Code Online (Sandbox Code Playgroud)