2015-07-03 73 views
2

我有一個列表我想拆分或分成多個子列表。這將是很好的,因爲它是爲了,但它不必。如果可能,我想將它分成3-5個列表。目前我正在使用下面的代碼,但我想知道是否有更好的方法來做到這一點。在python中拆分列表

data_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] 

print [data_list[i::3] for i in range(3)] 

#output => [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9]] 

該列表的長度是隨機的。有時它可以是其他兩次,它可以是103個元素(w /餘數)。我知道還有其他職位,但我沒有找到一個好的答案。希望能夠改變這一次...任何提示將不勝感激!

+0

這個代碼輸出這樣的:'[[ '一',' d','g'],['b','e'],['c','f']]' – Lynch

+5

你有沒有條件的子列表?你想讓它們的尺寸相同嗎?應該「關閉」的元素是否在同一個子列表中?你爲什麼將這個列表分成子列表? – syntonym

+0

@Jonathan這種方式有什麼問題? – salparadise

回答

1

不知道拿什麼給你一個更好的辦法,但仍,這是我拍:

import random 

def split(data_list): 
    new_list = [] 

    while len(data_list) != 0: 
     add = random.randint(3,5) 
     separed_list = [] 

     for i in xrange(add): 
      if len(data_list): 
       separed_list.append(data_list.pop(0)) 
     new_list.append(separed_list) 

    print(new_list) 

split(['a', 'b', 'c', 'd', 'e', 'f', 'j']); 
0

這裏有一個辦法:

import math 

def create_sublist(data_list, num_sublists): 
    sublist_length = math.ceil(len(data_list)/num_sublists) 
    list_of_sublists = [] 
    while data_list != []: 
     sublist = [] 
     for i in range(min(len(data_list), sublist_length)): 
      sublist.append(data_list.pop(0)) 
     list_of_sublists.append(sublist) 
    print(list_of_sublists) 

create_sublist(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], 3) 
>>> [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j']]