Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:
Вы пытаетесь использовать ссылочную переменную, значение которой
Nothing
/null
. Если для ссылочной переменной значениеNothing
/null
, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную
blockquote>Nothing
/null
, или вы вызывали функцию, которая установите для этой переменной значениеNothing
/null
.
Если ваш результат будет новым, вы можете использовать понимание списка:
new_list = [ some_function(i, j) for i, j in zip(list1, list2) ]
Вот реальный пример приведенного выше кода:
>>> list1 = [1, 2, 3, 4]
>>> list2 = [1, 3, 4, 4]
>>> like_nums = [ i == j for i, j in zip(list1, list2) ]
>>> print like_nums
[True, False, False, True]
Это сделает список bools, который показывает, являются ли элементы одного индекса в двух списках равными друг другу.
Кроме того, если вы используете функцию zip, существует возможность разархивировать результат, когда вы закончите работу с ним. Вот как это сделать:
>>> list1 = [1, 2, 3, 4]
>>> list2 = [1, 3, 4, 4]
>>> new_list = zip(list1, list2) # zip
>>> print new_list
[(1, 1), (2, 3), (3, 4), (4, 4)]
>>> newlist1, newlist2 = zip(*new_list) # unzip
>>> print list(newlist1)
[1, 2, 3, 4]
>>> print list(newlist2)
[1, 3, 4, 5]
Это может быть полезно, если вам нужно изменить исходные списки, а также каким-то образом сравнить элементы одного и того же индекса.
Вы можете перемещать оба списка одновременно с помощью zip:
for (x, y) in zip(list1, list2): do_something
Функция zip дает вам [(1,5), (2,6), (3,7), (4,8)]
, поэтому в итерации цикла N вы получаете N-й элемент каждого списка.
Операторы сравнения по умолчанию сравнивают списки в лексикографическом порядке. Поэтому вы можете сказать такие вещи, как:
>>> [1, 2, 3, 4] < [5, 6, 7, 8]
True
Если вместо этого вы хотите вычислить элементное сравнение, вы можете использовать map
и cmp
(или любой другой оператор:
>>> map(cmp, [1, 2, 3, 4], [5, 6, 7, 8])
[-1, -1, -1, -1]