Разделить строку скобками внутри скобок в Python

У меня есть два типа строк; каждый тип может иметь одну из следующих примерных форм:

str = ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9))

or

str = ((0, 1, 2), (3, 4, 5, 6, 7), (8, 9))

Количество подстрок в круглых скобках во второй форме может варьироваться от 1 до любого числа.

Мне нужно: а) иметь возможность обнаруживать наличие каждой формы и б) если строка имеет вторую форму, мне нужно извлечь каждую из подстрок в каждой из внутренних скобок.

У меня есть базовое понимание регулярных выражений, но я не понимаю, как с этим обращаться.


person Jose Manuel Albornoz    schedule 06.07.2016    source источник
comment
Зачем вам регулярное выражение? Это допустимые кортежи, просто ast.literal_eval их.   -  person jonrsharpe    schedule 06.07.2016
comment
С другой стороны, вы не должны называть свою переменную str. Это переопределяет встроенный.   -  person Rushy Panchal    schedule 06.07.2016
comment
Самый уродливый хак, который я могу придумать :[s[:s.index(')')] for s in str[1:-1].split('(') if s] ... как ни странно, он работает.   -  person polku    schedule 06.07.2016


Ответы (1)


Если это единственные два варианта, которые вы можете использовать:

if type(str[0]) == int:
   print 'TYPE1'
else if type(str[0]) == tuple:
   print 'TYPE2'
else:
   print 'unknown'

и для вашего второго вопроса, если вы находитесь в форме 2, используйте:

list(sum(str, ()))

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

Если вы хотите получить доступ к кортежам целиком, вы можете использовать:

for element in str:
   #element is an inner tuple
   for inner_element in element:
       #inner_element is an integer within the tuple
       print inner_element

Надеюсь это поможет

person Ishay Peled    schedule 06.07.2016