Разделен низ със скоби в скоби в 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