2014-12-26 2 views
0

Это будет применяться в рекурсивной функции дерева, но я думал, что я могу поставить его в перспективе с двумя основными списками:Как пройти через два списка

a = [1,2,3] 
b = [1,2,3] 

Я хотел бы использовать итерацию или рекурсию просто траверс через каждый элемент как «a», так и «b», и убедитесь, что все элементы имеют одинаковую ценность.

Я пробовал:

for i in a: 
    for g in b: 
     if i == g: 
      return True 

Но это, очевидно, не работает. Мое назначение - сравнить два дерева, чтобы убедиться, что все поддеревья имеют одинаковую ценность и одинаково расположены в одних и тех же местах.

+0

Должна быть лучшая цель. Почему вы не можете просто проверить 'a == b'? – jamylak

ответ

1
>>> all(x == y for (x, y) in itertools.izip(a, b)) 
True 
+0

Это означает 'True', даже если' a = [1,2,3] 'и' b = [1,2,3,4] '. – Akavall

+0

Несомненно, но проверка длины дешева и проста. –

+2

@ IgnacioVazquez-Abrams, да, но 'izip_longest' так же быстро и элегантнее, чем обрезать' izip', см. Мой ответ. –

2

В простой способ перечислить себя можно сравнить одинаковые или нет:

In[2]: a = [1,2,3] 
In[3]: b = [1,2,3] 
In[4]: a==b 
Out[4]: True 
In[5]: c = [2,1,3] 
In[6]: a==c 
Out[7]: False 

Предположим, что вы будете использовать только те же размеры деревьев а и б, вы должны пройти через два дерева по индексу:

all_equal = True 
for i in range(len(a)): 
    if a[i]!=b[i]: 
     all_equal = False 
     break 
+0

Наименее сложный, и самый эффективный. +1 –

+0

Проверяет только длину 'a'. Как сказал @Akavall: «Это оценивается как True, даже если' a = [1,2,3] 'и' b = [1,2,3,4] '" – jamylak

3
all(x == y for x, y in itertools.izip_longest(a, b, fillvalue=object())) 

должны наилучшим образом обеспечить результат, который вы хотите. fillvalue устанавливается на новый object(), A часовых гарантированно не сравнивать равно что-нибудь еще - и izip_longestколодки кратчайших из двух последовательностей с этими дозорными, таким образом, не гарантирует никаких «ложные срабатываний» равенство при сравнении последовательностей разной длины.

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