2015-01-19 3 views
-2

У меня есть список, который может содержать или не содержать подкризисные элементы в качестве элементов, и мне нужно проверить, является ли элемент незарезанным.Поиск подсписок внутри списков

Для примера рассмотрим

>>> list = ['a', 'b', 'c', ['d', 'e'] ] 

Как я бы ожидать, я получаю

>>> list[2] 
'c' 
>>> list[3] 
['d', 'e'] 
>>> list[3][1] 
'e' 

и

>>> len(list[1]) 
1 
>>> len(list[3]) 
2 

, а также

>>> type(list[1]) 
<type 'str'> 
>>> type(list[3]) 
<type 'list'> 

Пока все хорошо. Однако, совершенно неожиданно (по крайней мере, для питона новичка, как я)

>>> type(list[1]) is list 
False 
>>> type(list[3]) is list 
False 

Может кто-нибудь объяснить это? Ясно, что я могу просто использовать len(), чтобы определить, является ли элемент подсписком, но я думаю, что явная проверка типов должна быть более уместной, поскольку это более точное описание того, что я хочу делать. Благодарю.

+0

Я не уверен, что вы можете использовать 'len()'. Если ваш список был '['ab', 'cd', 'ef']', то каждый элемент имел бы длину> 1. – Holloway

ответ

3

Вы использовали имя list и являются затенением встроенного.

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

Переименовать список не использовать то же имя:

>>> lst = ['a', 'b', 'c', ['d', 'e'] ] 
>>> type(lst[3]) 
<type 'list'> 
>>> type(lst[3]) is list 
True 

Вообще говоря, вы хотите использовать isinstance() function, чтобы проверить, если что-то список:

>>> isinstance(lst[3], list) 
True 
+0

А, а я не могу поверить, что я был таким глупым! Даунвоты хорошо заслужены! –

0

просто проверить, если элемент a:

def is_inside(my_list, elem): 
    if isinstance(my_list, list): 
     return any([is_inside(child, elem) for child in my_list]) 
    else: 
     return my_list == elem 

In: is_inside(['a', 'b', 'c', ['d', 'e']], 'e') 
Out: True 

In: is_inside(['a', 'b', 'c', ['d', 'e']], 'f') 
Out: False 
+0

Думаю, вы неправильно поняли вопрос. Это не то, что пытался сделать OP. – Holloway

Смежные вопросы