Перечисление списков в Python
Ниже приведен фрагмент из упражнения по отслеживанию кода.
import copy def ct1(A, B, C, D, E): result = [ ] # 0 1 2 3 4 5 6 7 8 9 pairs = [(A,B),(A,C),(A,D),(A,E),(B,C),(B,D),(B,E),(C,D),(C,E),(D,E)] for i,pair in enumerate(pairs): (L, M) = pair if (L is M): result.append(i) elif (L == M): result.append(10*i) return result def f(L): L[0] += 1 return L A = list(range(3)) B = copy.copy(A) C, D, E = A, B+[ ], f(B) print(ct1(A, B, C, D, E))
Часть, с которой я запутался, – это перечисление, используемое в цикле for. Из документации для enumerate () выглядит, что pair
должна иметь такие значения, как:
(0, ([0, 1, 2], [1, 1, 2])) (1, ([0, 1, 2], [0, 1, 2])) (2, ([0, 1, 2], [0, 1, 2])) (3, ([0, 1, 2], [1, 1, 2])) (4, ([1, 1, 2], [0, 1, 2])) (5, ([1, 1, 2], [0, 1, 2])) (6, ([1, 1, 2], [1, 1, 2])) (7, ([0, 1, 2], [0, 1, 2]))
во время итерации, что означает, что 'L'
должен иметь значения от 0
до 7
и 'M'
, кортежи ([0, 1, 2], [1, 1, 2])
через ([0, 1, 2], [0, 1, 2])
. Однако, когда я запускаю этот код через отладчик, я вижу, что L
и M
являются списками. Например, когда i = 0, L = [0, 1, 2] and M = [1, 1, 2]
и т. Д. Может кто-нибудь объяснить, что происходит?
- Импорт с изменением переименования имени пакета в Python
- В python, учитывая список списков, как вы определяете индекс соответствующего элемента?
- перечисление списка в списке
- Как перечислить список нестроковых объектов в Python?
С линией for i,pair in enumerate(pairs):
i
получает значения индекса в pairs
списка и переходит от 0 до 9, а pair
получает значения из pairs
списка один за другим. Таким образом, для i = 0
pair
является ([0, 1, 2], [1, 1, 2])
. Затем вы вызываете (L, M) = pair
и это означает, что L
получает первый список, а M
получает второй список в кортеже. Надеюсь это поможет.
Конечно, L
и M
– списки. Если вы запустите
pairs = [(A,B),(A,C),(A,D),(A,E),(B,C),(B,D),(B,E),(C,D),(C,E),(D,E)] for i, pair in enumerate(pairs): print(i, pair)
вы получите желаемый результат. Таким образом, кортеж, который вы ищете, сохраняется в pairs
. С линией
# ... (L, M) = pair # ...
вы разбиваете кортеж, на который ссылается pair
на его элементы, которые – на первой итерации – два списка, на которые ссылаются A
и B
Вышеупомянутая линия по существу означает
(L, M) = (A, B)
что эквивалентно
L, M = A, B
который, в свою очередь, означает «назначить A
на L
и назначить B на M
».
- Настройка Django и React
- Не удалось запустить Selenium + Python Script на linux mint с Chrome и firefox