2010-04-15 2 views
7

Если пользователь вводит [[0,0,0], [0,0,1], [1,1,0]] и нажимает enter, программа должна преобразовать эту строку в несколько списков; один список держа [0][0][0], другой для [0][0][1], и последний список для [1][1][0]Как преобразовать эту строку в список списков?

Есть ли у питона хороший способ справиться с этим?

+0

Это не ясно, что вы пытаетесь делать. Получаете ли вы ввод как строку с использованием 'raw_input()' или что-то подобное? –

+0

raw_input. Прости. Я забыл упомянуть об этом. – Phrixus

+0

Ответ человека был самым простым решением, которое я мог сразу понять на моем уровне python. Тем не менее, благодаря всем другим пользователям pro python! : D Чтение всех видов разных, творческих ответов было очень интересно! Вы, ребята, потрясающие! – Phrixus

ответ

1

Это немного более гибкий, чем Satoru, и не использует библиотеки. Тем не менее, он не будет работать с более глубоко вложенными списками. Для этого, я думаю, вам понадобится рекурсивная функция (или цикл) или eval.

str = "[[0,0,0],[0,0,1],[1,1,0]]" 
strs = str.replace('[','').split('],') 
lists = [map(int, s.replace(']','').split(',')) for s in strs] 

списки теперь содержат список списков, которые вы хотите.

+0

Thx! Это было самое простое решение, которое я мог сразу понять на моем уровне python. Благодаря другим пользователям python! : D – Phrixus

+0

@Prixius, есть причина, по которой это решение не получило голосов. Это самое уродливое и самое извращенное решение. Мой голос за решение @ S.Mark. –

+0

@Marcelo Cantos, Спасибо за ваш совет. Возможно, это может считаться плохим решением, если пользователи python видят это. Однако его решение просто работает для моей программы, и это легко объяснить другим. :) Больше всего, я понятия не имею, что такое аст или json вещи ... и было интересно, возможно ли это без импорта вещей .. Но, еще раз спасибо за ваш совет. Я также взгляну на ваши ответы, если я когда-нибудь пойму питона! – Phrixus

17
>>> import json 
>>> json.loads('[[0,0,0], [0,0,1], [1,1,0]]') 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 
+0

Это только python 2.6+ без внешних модулей. – fabrizioM

+4

Обратите внимание, что это анализирует выражение как JSON, * not * как литералы Python. Для списков и целых чисел и строк это в основном то же самое. Для других типов, таких как кортежи, это не сработает. –

+0

@Thomas Wouters Вы тот же Томас Вотерс, который объясняет внутренности Python гуглерам? –

0
>>> import re  
>>> list_strs = re.findall(r'\[\d+\,\d+\,\d+\]', s) 
>>> [[[int(i)] for i in l[1:-1].split(',')] for l in list_str] 
-2
>>> string='[[0,0,0], [0,0,1], [1,1,0]]' 
>>> eval(string) 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 
>>> a=eval(string) 
>>> a 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 

перед передачей вашей строки в eval(), сделайте необходимую санитарную первым.

+5

Не предлагайте eval(), не объясняя, как он выполняет полностью произвольный код Python. –

+0

все, что требуется, - это ввести «exit()» ... – thepandaatemyface

17
>>> import ast 
>>> ast.literal_eval('[[0,0,0], [0,0,1], [1,1,0]]') 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 

Для кортежей

>>> ast.literal_eval('[(0,0,0), (0,0,1), (1,1,0)]') 
[(0, 0, 0), (0, 0, 1), (1, 1, 0)] 
1

[[int(i) for i in x.strip(" []").split(",")] for x in s.strip('[]').split("],")]

список понимание в списке понимание ... но это будет таять ваш мозг

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