Попробуйте следующее:
def orderList2(item, level=0):
for i in item:
if isinstance(i, basestring):
print level, i.encode('utf-8'), 'tuple <br />'
elif isinstance(i, tuple):
orderList2(i, level)
else:
orderList2(i, level+1)
Вот вывод для ваших данных:
>>> item = [(u'Arts & Entertainment', [u'Celebrities & Entertainment News', (u'Comics & Animation', [u'Anime & Manga', u'Cartoons', u'Comics'])])]
>>> orderList2(item)
0 Arts & Entertainment tuple <br />
1 Celebrities & Entertainment News tuple <br />
1 Comics & Animation tuple <br />
2 Anime & Manga tuple <br />
2 Cartoons tuple <br />
2 Comics tuple <br />
Обратите внимание, что вместо использования переменной глобального уровня это просто передает текущий уровеньиспользовать в рекурсии.Кроме того, в вашей версии рекурсивный вызов был orderList2(item)
, когда вы, вероятно, хотели вызвать его с помощью i
.Вместо того, чтобы печатать первый элемент в кортежах, он будет просто делать рекурсивный вызов с тем же уровнем, а со списками он будет делать рекурсивный вызов и увеличивать уровень.Наконец, вместо проверки isinstance(i, str)
он проверяет basestring
, что необходимо, так как строки в ваших данных имеют Unicode.