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

Список будет случайным. Иногда это может быть еще 2 раза, это может быть 103 элемента (с остатками). Я знаю, что для этого были другие сообщения, но я не нашел хорошего ответа. Надеюсь, что на этот раз ... любые советы будут очень признательны!

+0

этот код вывода это: '[[ 'а', ' d ',' g '], [' b ',' e '], [' c ',' f ']] ' – Lynch

+5

У вас нет условий для подписок? Вы хотите, чтобы они были одинакового размера? Должны ли элементы, «близкие», находиться в одном и том же подсписке? Почему вы разделили список на подсписки? – syntonym

+0

@ Джонатан, в чем проблема с этим путем? – 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']] 
Смежные вопросы