2017-01-26 3 views
2

Как создать многомерный список при повторении через 1-й список на основе некоторого условия.Как создать многомерный список в Python?

Я итерация над 1d списка и всякий раз, когда я найти «\ п» я должен добавить так созданный список с новым списком, например,

a = [1,2,3,4,5,'\n',6,7,8,9,0,'\n',3,45,6,7,2] 

, поэтому я хочу, чтобы это было так,

new_list = [[1,2,3,4],[6,7,8,9,0],[3,45,6,7,2]] 

Как я должен это делать? Пожалуйста, помогите

def storeData(k): 
    global dataList 
    dlist = [] 
    for y in k: 
     if y != '\n': 
      dlist.append(y) 
     else: 
      break 
    return dlist 

Это то, что я пробовал.

+0

Учитывая ввод пустой список. Каков ожидаемый результат? –

+0

Вы, вероятно, должны изменить любой код, созданный этим странным списком входных данных. Постобработка - это неправильный путь. – user2357112

+0

@WillemVanOnsem Я бы принял пустой список, но лучше, если OP говорит. – Octo

ответ

1

Использование itertools.groupby будет делать работу (группировка по не быть перевод строки):

import itertools 

a = [1,2,3,4,5,'\n',6,7,8,9,0,'\n',3,45,6,7,2] 

new_list = [list(x) for k,x in itertools.groupby(a,key=lambda x : x!='\n') if k] 

print(new_list) 

Мы сравниваем ключевое значение истина, чтобы отфильтровать вхождения \n

результат:

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [3, 45, 6, 7, 2]] 
+0

Вы можете использовать текущие игнорируемые значения ключей из groupby для исключения второго прохода. – user2357112

+0

@ пользователь2357112 фиксированный. Это намного лучше, ты прав! –

0

Вот базовый подход:

EDIT: Боже мой! Глубокая ошибка ... вот исправление:

>>> sub = [] 
>>> final = [] 
>>> for e in a: 
...  if e == '\n': 
...   final.append(sub) 
...   sub = [] 
...  else: 
...   sub.append(e) 
... else: 
...  final.append(sub) 
... 
>>> final 
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [3, 45, 6, 7, 2]] 
>>> 

Есть и другие способы, но это наивный императивный способ.

+1

Вопрос OPs и желаемый результат не совсем совпадают. Они хотят [[1,2,3,4], [6,7,8,9,0], [3,45,6,7,2]] не [[1, 2, 3, 4, 5] , [6, 7, 8, 9, 0]]. Вам нужно условие, чтобы добавить sub в конец финала, если у вас закончились элементы в a, не видя другого «\ n». – Fruitspunchsamurai

+0

@Fruitspunchsamurai да, да. Виноват. –

+0

Почему 'final.append (sub)' в 'else'? И «...'btw сделать это действительно громоздким, чтобы проверить ... –

0

Вот как я это сделал, но должны быть лучшие решения.

x = 0 
output = [[]] 
for item in a: 
    if item != "\n": 
     output[x].append(item) 
    else: 
     x += 1 
     output.append([]) 

print(output) 
3

Пример кода:

lst = [[]] 
for x in a: 
    if x != '\n': 
     lst[-1].append(x) 
    else: 
     lst.append([]) 
print(lst) 

выход:

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 0], [3, 45, 6, 7, 2]] 
Смежные вопросы