Я хочу проверить, различны ли элементы в двух массивах, используя Python.
Я не хочу использовать numpy и придерживаться общего Python.
Вот пример ниже:
arr1 = [1,2,3,4,5,6,7]
arr2 = [1,2,3,4,5,6,7,8,9,10]
Я ожидаю, что результат будет [8,9,10]
До сих пор я пытался выполнить цикл for
for x in range(len(arr1)):
for y in range(len(arr2)):
if arr1[x] != arr2[y]:
print(arr2[y])
Но я получаю это как вывод оператора печати - 2345678910134567891012456789101235678910123467891012345789101234568910
@AndrewYim Нет, если нужно сохранить дубликаты.
@Pepwave Если у вас есть списки [1, 1]
и [1]
, должен ли вывод быть []
или [1]
?
Почему arr1
является префиксом arr2
? Это всегда так или это просто ужасный пример?
С однострочником Python:
res = [x for x in array2 if x not in array1]
print(res) # Output : [8, 9, 10]
Эквивалентный метод для обычной итерации
lst = []
for x in array2:
if x not in array1:
lst.append(x)
print(lst) # Output : [8, 9, 10]
Спасибо, приятель. Это ответ на мой вопрос.
Ваш код сравнивает каждый элемент первого массива с каждым элементом второго массива и печатает элемент каждый раз, когда два элемента не совпадают.
Вместо этого вам нужно сравнить каждый элемент первого массива со всеми элементами второго массива и печатать элемент только в том случае, если совпадений нет.
arr1 = [1,2,3,4,5,6,7]
arr2 = [1,2,3,4,5,6,7,8,9,10]
for num in arr2:
if num not in arr1:
print(num)
Отмечу, что данная реализация не очень эффективна. Во многих случаях имеет смысл сравнивать множества:
arr1 = [1,2,3,4,5,6,7]
arr2 = [1,2,3,4,5,6,7,8,9,10]
output = list(set(arr2) - set(arr1))
print(output)
Примечание. Сравнение наборов приведет к удалению дубликатов.
Вы можете получить некоторый выигрыш в производительности в первом стиле кода, если вместо этого превратите один из списков в набор. Использование value in some_set
в среднем требует O(1), а не O(N) для поиска по списку.
Вы могли бы использовать set(), чтобы найти только уникальные записи, вычесть оба набора и преобразовать ответ в список, используя функцию list().
arr1 = [1, 2, 3, 4, 5, 6, 7]
arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr1.sort()
arr2.sort()
if arr1 == arr2:
print("The arrays are equal.")
else:
arr3=list(set(arr2) - set(arr1))
print(arr3)
Вероятно, вы ищете разницу в сетах.