Форум сайта python.su
Замучался с вложенными списками :(
например а = [,,,] b = [,,]
списки намного больше, приходиться писать много for для обхода и сравнения, при чем много проверок, т.к. списки еще и разной длины получаются. Не подскажете метод работы с вложенными значениями?
Ну это я так, попутно ломаю голову. Главный вопрос из-за которого создал топик выглядит в сабже.
почему а = [,,,] считается не пустым?
тоже в цикле обходить и проверять пустое или нет?
просто казалось все так хорошо в питоне, пока с этими вложениями не встретился.. :(
Офлайн
можно рекурсией
наподобие этого
def chek(x):
if type(x) == type([]):
if x == []: return None
for y in x:
if chek(y):return 1
else:
return 1
print chek([[[],[],[]],])
print chek([[[],[[],[1111]],[]],])
Офлайн
False даёт только пустой список. [] - не пустой, а список содержащий список.
Используйте итераторы, генераторы и ленивые функции типа map, filter - это хорошо оптимизирует работу со списками.
PS. Хотите проверить на пустоту вложенных списков - используйте all([, , ])
Отредактировано (Окт. 24, 2010 11:53:41)
Офлайн
Ferroman
PS. Хотите проверить на пустоту вложенных списков - используйте all([, , ])
>>> all([[],[1],[]])
False
>>> any([[],[1],[]])
True
Офлайн
FerromanСпасибо!
False даёт только пустой список. [] - не пустой, а список содержащий список.
Используйте итераторы, генераторы и ленивые функции типа map, filter - это хорошо оптимизирует работу со списками.
PS. Хотите проверить на пустоту вложенных списков - используйте all([, , ])
q = [q for q in myf if q != []]
if q != []:
Офлайн
Вариант с any здесь самый лучший.
Хотя можно и так:
>>> bool(filter(None, []))
False
>>> bool(filter(None, [[], []]))
False
>>> bool(filter(None, [[], [1]]))
True
Офлайн