питонический путь итерации по переменному числу последовательностей [дубликат]

Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:

Вы пытаетесь использовать ссылочную переменную, значение которой Nothing / null. Если для ссылочной переменной значение Nothing / null, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.

Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную Nothing / null, или вы вызывали функцию, которая установите для этой переменной значение Nothing / null.

3
задан JS. 7 November 2011 в 06:22
поделиться

3 ответа

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

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]

Это может быть полезно, если вам нужно изменить исходные списки, а также каким-то образом сравнить элементы одного и того же индекса.

1
ответ дан amillerrhodes 26 August 2018 в 02:06
поделиться

Вы можете перемещать оба списка одновременно с помощью zip:

for (x, y) in zip(list1, list2): do_something

Функция zip дает вам [(1,5), (2,6), (3,7), (4,8)], поэтому в итерации цикла N вы получаете N-й элемент каждого списка.

8
ответ дан Heatsink 26 August 2018 в 02:06
поделиться

Операторы сравнения по умолчанию сравнивают списки в лексикографическом порядке. Поэтому вы можете сказать такие вещи, как:

>>> [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]
5
ответ дан SingleNegationElimination 26 August 2018 в 02:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: