Как убедиться, что я не сравниваю два списка с одинаковым размером и содержанием в обратном направлении - PullRequest
0 голосов
/ 09 октября 2018

Я хотел бы создать два цикла for для двух списков размером 4.

list_01 = [0,1,2,3] and list_02 = [0,1,2,3]

Я уже сделал следующее заявление:

for ii in range(len(list_01)):
  for jj in range(len(list_02)):

  # if list_01[ii] != list_02[jj]:
    if list_01[0] != list_02[1]:
       ...

Я бы хотелчтобы не делать «то же самое» в обратном направлении, как это:

  # if list_01[ii] != list_02[jj]:
    if list_01[1] != list_02[0]:
       ...

Просто сравните каждое из значений друг с другом один раз.

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

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

from itertools import product

list_01 = [0,1,2,3]
list_02 = [0,1,2,3]

i1 = range(len(list_01))
i2 = range(len(list_02))

indices = []

for p in product(i1, i2):
    if sorted(p) not in indices:
        indices.append(list(p))

for i, j in indices:
    #do stuff
0 голосов
/ 09 октября 2018

Если вы хотите сравнить list_01[ii] != list_02[jj] так, чтобы ii <= jj, то просто убедитесь, что вы начинаете с ii вместо 0 во внутреннем цикле:

for ii in range(len(list_01)):
  # start at ii, not 0, to maintain invariant that ii <= jj
  for jj in range(ii, len(list_02)):
    if list_01[ii] != list_02[jj]:
      # do stuff

РЕДАКТИРОВАТЬ: Как отмечалось в комментариях, это не очень Pythonic.Может быть, лучше избегать индексов и просто получать нужные вам вещи напрямую:

for ii, item_01 in enumerate(list_01):
  for item_02 in list_02[ii:]: # slice from ii to end
    if item_01 != item_02:
      # do stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...