Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2010 21:55:11

vir
От:
Зарегистрирован: 2010-10-23
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

[[],[],[]] != True?

Замучался с вложенными списками :(

например а = [,,,] b = [,,]
списки намного больше, приходиться писать много for для обхода и сравнения, при чем много проверок, т.к. списки еще и разной длины получаются. Не подскажете метод работы с вложенными значениями?

Ну это я так, попутно ломаю голову. Главный вопрос из-за которого создал топик выглядит в сабже.

почему а = [,,,] считается не пустым?
тоже в цикле обходить и проверять пустое или нет?
просто казалось все так хорошо в питоне, пока с этими вложениями не встретился.. :(



Офлайн

#2 Окт. 23, 2010 22:55:28

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

[[],[],[]] != True?

можно рекурсией
наподобие этого

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]],[]],])



Офлайн

#3 Окт. 24, 2010 11:51:28

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

[[],[],[]] != True?

False даёт только пустой список. [] - не пустой, а список содержащий список.
Используйте итераторы, генераторы и ленивые функции типа map, filter - это хорошо оптимизирует работу со списками.

PS. Хотите проверить на пустоту вложенных списков - используйте all([, , ])

Отредактировано (Окт. 24, 2010 11:53:41)

Офлайн

#4 Окт. 24, 2010 21:49:28

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

[[],[],[]] != True?

Ferroman
PS. Хотите проверить на пустоту вложенных списков - используйте all([, , ])
>>> all([[],[1],[]])
False
>>> any([[],[1],[]])
True

Офлайн

#5 Окт. 24, 2010 23:52:36

vir
От:
Зарегистрирован: 2010-10-23
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

[[],[],[]] != True?

Ferroman
False даёт только пустой список. [] - не пустой, а список содержащий список.
Используйте итераторы, генераторы и ленивые функции типа map, filter - это хорошо оптимизирует работу со списками.

PS. Хотите проверить на пустоту вложенных списков - используйте all([, , ])
Спасибо!
Я делал так
q = [q for q in myf if q != []]
if q != []:
буду пробовать использовать ваши советы.



Офлайн

#6 Окт. 25, 2010 16:53:43

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

[[],[],[]] != True?

Вариант с any здесь самый лучший.
Хотя можно и так:

>>> bool(filter(None, []))
False
>>> bool(filter(None, [[], []]))
False
>>> bool(filter(None, [[], [1]]))
True
..bw



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version