2011-06-16 3 views
2

Possible en double:
How do you split a list into evenly sized chunks in Python?façon pythonienne de diviser la liste?

J'ai une fonction comme ci-dessous:

def split_list(self,my_list,num):  
    .....  
    ..... 

où my_list est:

my_list = [['1','one'],['2','two'],['3','three'],['4','four'],['5','five'],['6','six'],['7','seven'],['8','eight']] 

Je veux diviser la liste par num donné:

à savoir si num = 3 puis sortie sera: [[['1','one'],['2','two'],['3','three']],[['4','four'],['5','five'],['6','six']],[['7','seven'],['8','eight']]]

si num = 4 puis

[[['1','one'],['2','two'],['3','three'],['4','four']],[['5','five'],['6','six'],['7','seven'],['8','eight']]] 
+1

@DrTyrsa: Cela est différent. Là, la taille du morceau est spécifiée, ici le nombre de morceaux. –

+0

@Felix Kling: non, c'est un doublon exact. – Kimvais

+1

@Felix Kling Je vois deux morceaux pour 'num = 4'. Et toi? – DrTyrsa

Répondre

3

Je voudrais juste utiliser un la compréhension liste/générateur:

[my_list[x:x+num] for x in range(0, len(my_list), num)] 
0
def split_list(lst, num): 
    def splitter(lst, num): 
     while lst: 
      head = lst[:num] 
      lst = lst[num:] 
      yield head 
    return list(splitter(lst, num)) 

Voici un extrait de en cours d'exécution dans la coquille interactive:

>>> def split_list(lst, num): 
...  def splitter(lst, num): 
...   while lst: 
...    head = lst[:num] 
...    lst = lst[num:] 
...    yield head 
...  return list(splitter(lst, num)) 
... 
>>> split_list(range(10), 3) 
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]] 
Questions connexes