2015-03-09 3 views
-4

У меня есть следующие list строк:разбиение списка на списки в python?

data = ["1","0","1","<>","0","1","0","<>","1","0","1"] 

То, что я хотел бы в качестве результата:

[[1, 0, 1], [0, 1, 0], [1, 0, 1]] 

Э.Г. список списков, где каждый список делится на <>, а результирующие строки преобразуются в целые числа.

+1

Можете ли вы поделиться свои усилия для достижения решения. –

+0

Я не вижу, как это дубликат, учитывая, что куски не обязательно равномерно. –

+0

@AndrewMagee: действительно, моя ошибка, вновь открылась. Страшное форматирование отбросило меня. –

ответ

-2

You можно попробовать использовать списковых с помощью комбинации соединения и разделения:

your_list = [[int(j) for j in i.split()] for i in ' '.join(data).split('<>')] 
+0

Это не удастся во втором списке, в котором есть число с более чем одной цифрой. –

+0

Нет, он будет работать нормально. Ты это пробовал? –

+0

Как он будет различать '[" 1 "," 0 "," <> ", ...]' от '[" 10 "," <> ", ...]'? –

3

Вы можете использовать itertools.groupby эффективно разделить на каждом <>, а затем принять получившиеся группы, где ключ не True (например: это <>) и конвертировать в int с, например:

from itertools import groupby 

data = ["1","0","1","<>","0","1","0","<>","1","0","1"] 
new_date = [[int(i) for i in g] for k, g in groupby(data, '<>'.__ne__) if k] 
# [[1, 0, 1], [0, 1, 0], [1, 0, 1]] 
+0

Ну, если вы посмотрите на строку 'import', которая есть ... :) –

+0

Я проверил ваш код и остановился на этой ошибке: неверный литерал для int() с базой 10: '<' –

+0

@ mahya.khazaee : у вас есть фракции в ваших данных? – Jerry

0

Я предлагаю вам более функциональный стиль решения:

data = ["1","0","1","<>","0","1","0","<>","1","0","1"] 
reduce(lambda a, b: a[:-1] + [a[-1] + [int(b)]] if b != '<>' else a + [[]], data, [[]]) 
0

Вы также можете попробовать это.

l = ["1","0","1","<>","0","1","0","<>","1","0","1"] 
m = [] 
x = [] 
j = [] 
for i in l: 
    if i == '<>': 
     m.append(x) 
     x = [] 
     j = [] 
    else: 
     x.append(int(i)) 
     j.append(int(i)) 
m.append(j) 
print(m) 

Выход:

[[1, 0, 1], [0, 1, 0], [1, 0, 1]] 
+0

Спасибо всем –

Смежные вопросы