2017-07-27 1 views
4

I eine Liste von numerischen Werten besitzen, zum Beispiel my_list = [1,34,56,2,7,89,12,13,10,56,43,12,78,98,5,105,1,2] und ein Satz von vordefinierten Gruppen:Python: batch Elemente einer Liste in vordefinierten Gruppen

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, 

Ich möchte das folgende erhalten:

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

eine Möglichkeit, es zu tun ist eine for-Schleife zu machen und überprüfen sie die if-elif-else Bedingung für jedes Element, wie unten:

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

Gibt es eine Möglichkeit, die Elemente der Liste zu gruppieren, die schneller und ein bisschen eleganter sind? Die reale my_list, die ich benutze, ist groß, also wäre jeder Weg zur Optimierung großartig!

Antwort

6

Sie können hierzu das Modul bisect verwenden.

Hier finden wir für jedes Element in my_list den Index, wo es in groups Liste passen kann und dieser Index wird als die Gruppennummer fungieren.

>>> 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

Das half, danke! – Ziva

Verwandte Themen