Как выполнить итерацию по двум спискам разной длины, а затем сохранить в новом списке только те значения, которые не похожи

#python #arraylist

Вопрос:

 array1 - [40, 30, 20, 10]
array2 -[40, 30, 40, 20, 40, 10, 30, 40, 30, 20, 30, 10, 20, 40, 20, 30, 20, 10, 10, 40, 10, 30, 10, 20]
 

Я хочу выполнить array2 итерацию array1 в следующем порядке индексов:

array2{0}(40) ->> array2{1}(30) ->> array2{0}(40) ->> array2{1}(30) а затем перейдите к: array2{2}(40)->... повторяйте то же самое, пока не дойдете до конца array2 . И пока это происходит, он просматривает каждый элемент array1 и ищет любые не похожие значения ( 20 10 здесь), это сохраняется в новом массиве.

Здесь {} [] .

Комментарии:

1. Привет @Colt_Rigs, почему вы повторяете первые два элемента массива два раза — array2{0}(40)->array2{1}(30), а затем снова array2{0}(40)->>array2{1}(30). Как вы сравниваете, чтобы получить сходство между этими двумя массивами.

Ответ №1:

Если я правильно понял, вы хотите выполнить итерацию по массивам, по два (пары), каждый раз сравнивая пару из массива 1 с парой из массива 2, чтобы определить, считается ли это разницей, и в этом случае вы вернете все разные пары в конце.

(Я использовал itertools рецепт, доступный в его официальной документации или в more_itertools библиотеке)

Это мое предложение :

 from itertools import zip_longest

from more_itertools import grouper


def compare_arrays(a, b):
    differences = []
    # we start by grouping each list by twos, and zipping them together
    for pair_a, pair_b in zip_longest(grouper(a, 2), grouper(b, 2)):
        # print(pair_a, "|", pair_b)
        if pair_a is None or pair_b is None:
            break  # if the lists have not the same length, it does not count as a difference
        elif pair_a != pair_b:
            differences.extend(pair_a)
    return differences


array1 = [40, 30, 20, 10]
array2 = [40, 30, 40, 20, 40, 10, 30, 40, 30, 20, 30, 10, 20, 40, 20, 30, 20, 10, 10, 40, 10, 30, 10, 20]
print(compare_arrays(array1, array2))
# [20, 10]

array1 = [20, 20, 30, 40, 50, 50, 60, 70]
array2 = [20, 20, 30, 00, 50, 00]
print(compare_arrays(array1, array2))
# [30, 40, 50, 50]