2013-09-02 2 views
0

У меня проблема с моим списком. У меня есть список со многими подсписками. Это выглядит следующим образом:Python Разбить список с подсписок

L=[[1,5],[1,1,2,8,5,6],[6,46,35,86,24,3,34,46,23,35],[12,14,53,24,41,53],[1,3,6,4,3,8],[2,5,54,4,61,72,65,54],[43,6,2,6,51,3,43,13,64,52,5,8,3,57,52]] 

То, что я хочу что-то вроде этого:

L1=[1,5] 
L2=[1,1,2,8,5,6] 
L3=[6,46,35,86,24,3,34,46,23,35] 
L4=[12,14,53,24,41,53] 
L5=[1,3,6,4,3,8] 
... 

Я попробовал его с itertools.groupby(), но это только дало мне:

L=[[[1,5],[1,1,2,8,5,6],[1,3,6,4,3,8]],[6,46,35,86,24,3,34,46,23,35],[12,14,53,24,41,53],[2,5,54,4,61,72,65,54],[43,6,2,6,51,3,43,13,64,52,5,8,3,57,52]] 

Как я могу сделать что я хочу?

+1

Вы можете использовать индексы вместо создания новой переменной для каждого элемента. L [0], L [1], ... –

+4

Нет. [Сохраняйте данные из ваших имен переменных] (http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html). У вас уже есть список, почему 'L [0]', 'L [1]' и т. Д. Не работают для вас? –

+2

«Я хочу, чтобы это было так:» - нет. Нет, нет. Вы думаете, что это так, потому что вы не знакомы с индексацией, но то, что вы пытаетесь сделать, - неправильное решение. – user2357112

ответ

2

Во-первых, itertools.groupby() не поможет вам здесь.

Вы можете использовать распаковку здесь, фантастическую функцию в Python (на мой взгляд):

L1, L2, L3, L4, L5, L6, L7 = L 

Но если вы намерены иметь что-то вроде этого, то вы ищете в неправильном подходе. Рассмотрим словарь:

d = {} 
for i, j in enumerate(L, 1): 
    d['L{}'.format(i)] = j 

Печать d дает:

{'L6': [2, 5, 54, 4, 61, 72, 65, 54], 'L7': [43, 6, 2, 6, 51, 3, 43, 13, 64, 52, 5, 8, 3, 57, 52], 'L4': [12, 14, 53, 24, 41, 53], 'L5': [1, 3, 6, 4, 3, 8], 'L2': [1, 1, 2, 8, 5, 6], 'L3': [6, 46, 35, 86, 24, 3, 34, 46, 23, 35], 'L1': [1, 5]} 
+0

Нужна ли нам группа здесь? –

+0

@ RomanPekar О, да, мы не ... Угадайте, я просто увлекся тем, что поставил OP. – TerryA

2

лучшее, что я могу для вас сделать - создать Dict с клавишами, как L1, L2:

>>> {'L{}'.format(i): x for i, x in enumerate(L, 1)} 
{'L1': [1, 5], 
'L2': [1, 1, 2, 8, 5, 6], 
'L3': [6, 46, 35, 86, 24, 3, 34, 46, 23, 35], 
'L4': [12, 14, 53, 24, 41, 53], 
'L5': [1, 3, 6, 4, 3, 8], 
'L6': [2, 5, 54, 4, 61, 72, 65, 54], 
'L7': [43, 6, 2, 6, 51, 3, 43, 13, 64, 52, 5, 8, 3, 57, 52]} 
+0

Вы можете использовать 'enumerate (..., 1)', чтобы начать с 1 вместо. Вы создали словарь, начинающийся с 'L0' здесь. –

+0

@MartijnPieters благодарит, пропустил это –

+0

Вы также хотите обновить свой образец. :-P –

4

Вам не нужно создавать переменные L1, L2, L3 и т.д. Список индексирование уже делает то, что вам нужно:

L=[[1,5], 
    [1,1,2,8,5,6], 
    [6,46,35,86,24,3,34,46,23,35], 
    [12,14,53,24,41,53], 
    [1,3,6,4,3,8], 
    [2,5,54,4,61,72,65,54], 
    [43,6,2,6,51,3,43,13,64,52,5,8,3,57,52]] 

print L[0] # prints [1, 5] 
print L[4] # prints [1, 3, 6, 4, 3, 8] 

# If you want the first element of the first list in L, you use 
L[0][0] 

Это имеет то преимущество, что работает независимо от размера L. Вам не нужно делать переменные zillion, если L огромен, или переписать вашу программу для всех возможных размеров L.

0

Вы можете использовать индексы !!

L1=L[0] 
L2=L[1] 

и так далее ....

print L1 
>> [1,5]