Преобразование строки в список — str2list(‘[abc]’) должно возвращать [‘a’,‘b’,‘c’]

#python #python-3.x #string #list

#питон #python-3.x #строка #Список

Вопрос:

Я новичок в программировании и пытаюсь преобразовать входную строку из букв и квадратных скобок (т. Е. [ и ]) в список букв и списков. Квадратные скобки указывают, где начинается и заканчивается список, в то время как каждая буква переводится в элемент соответствующего списка.

str2list(‘[abc]’) должен вернуться [‘a’,‘b’,‘c’] str2list(‘[a[bc]]’) должен вернуться [‘a’,[‘b’,‘c’]]

Мои попытки в этом:

Попытка 1:

 def str2list(s):  list1=[]  list1[:0]=s  # s.replace(',', '')  # a = s.split(",")  list1.append([])  return list1   str2list('[abc]')  

Попытка 2:

 def str2list(s):  list1=[]  list1[:0]=s  return list1  str2list('[abc]')  

Но я не получаю желаемого результата. Я застрял. Не мог бы кто-нибудь, пожалуйста, помочь мне и сказать, что нужно сделать?

Ответ №1:

 def s2l(i):  while True:  n = next(i)  if n == '[':  yield [x for x in s2l(i) ]  elif n == ']':  return  else:  yield n  res = next(s2l(iter("[ab[123]cd]")))  

печать(res) вернется

 ['a', 'b', ['1', '2', '3'], 'c', 'd']  

Комментарии:

1. вау, рекурсия в понимании в генераторе в цикле в цикле 🙂

2. Спасибо за помощь, я попробовал ваш код, но он показывает ошибку или странный вывод типа «lt;объект генератора s2l в 0x7fab086d65f0gt;». Не могли бы вы, пожалуйста, помочь?

3. обновлено для py3

Ответ №2:

Вам просто нужно тщательно подумать о том, если-еще-условия:

 def str2list(my_str):  out = []  for s in my_str.split('['):  if ']' in s[:-1]:  s1 = s.split(']')  s1 = [list(s1[0])] list(s1[1])  elif s[-1:] == ']':  s1 = [list(s.strip(']'))]  else:  s1 = list(s)  out.extend(s1)  return out  print(str2list('[wewr[sfs]]')) print(str2list('[wewr[sfs]da]')) print(str2list('[wewr[sfs]da[ds]]')) print(str2list('[wewr[sfs]da[ds][dfd]]'))  

Выход:

 ['w', 'e', 'w', 'r', ['s', 'f', 's']] ['w', 'e', 'w', 'r', ['s', 'f', 's'], 'd', 'a'] ['w', 'e', 'w', 'r', ['s', 'f', 's'], 'd', 'a', ['d', 's']] ['w', 'e', 'w', 'r', ['s', 'f', 's'], 'd', 'a', ['d', 's'], ['d', 'f', 'd']]  

Комментарии:

1. О чем str2list("[ab[cd[efg]]]") ?