2015-07-03 111 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']]