2017-07-27 35 views
4

我有數值的列表,例如my_list = [1,34,56,2,7,89,12,13,10,56,43,12,78,98,5,105,1,2]和一組預定義的組:的Python:列表的批次的元件到預定義的組

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, 

我想獲取以下信息:

{1: [1,2,1,2,5], 
2: [7,12,10,12], 
3: [13], 
4: [34,56,56,43], 
5: [89,78,98,105]} 

這樣做是讓一個for循環,並檢查是否-elif的 - else條件對每個元素,如下面的方法之一:

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

有什麼辦法可以將列表中的元素更快更優雅地分組嗎?我使用的真正my_list很大,所以任何優化的方法都會很棒!

回答

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]} 
+0

這幫了,謝謝! – Ziva