Найти разность элементов массива питон

Рассчитать разницу между соседними элементами в списке Python

У меня есть список миллионов чисел. Я хочу узнать, является ли разница между каждым числом в упорядоченном списке одинаковым для всего списка. list_example = [0, 5, 10, 15, 20, 25, 30, 35, 40. etc и т.д. и т.д.] Какой лучший способ сделать это? Моя попытка:

import collections list_example = [ 0, 5, 10, 15, 20, 25, 30, 35, 40 ] count = collections.Counter() for x,y in zip(list_example[0::],list_example[1::]): print x,y,y-x count[y-x] +=1 if len( count ) == 1: print 'Differences all the same' 
0 5 5 5 10 5 10 15 5 15 20 5 20 25 5 25 30 5 30 35 5 35 40 5 Differences all the same 

8 ответов

Прямой подход здесь лучший:

x = s[1] - s[0] for i in range(2, len(s)): if s[i] - s[i-1] != x: break else: #do some work here. 

Мне нравится этот ответ, потому что он прост и позволяет укорачивать, если обнаружена другая разница.

Использование чистого Python:

>>> x = [0,5,10,15,20] >>> xdiff = [x[n]-x[n-1] for n in range(1,len(x))] >>> xdiff [5, 5, 5, 5] >>> all([xdiff[0] == xdiff[n] for n in range(1,len(xdiff))]) True 

Это немного проще и, вероятно, быстрее, если вы используете NumPy:

>>> import numpy as np >>> xdiff = np.diff(x) >>> np.all(xdiff[0] == xdiff) True 

Но оба они создают два дополнительных списка (или массивы, в случае NumPy), которые могут сожрать вашу доступную память, если у вас есть миллионы чисел.

Читайте также:  Телеграмм бот апи python

Необходимо заметить, что в списке могут быть миллионы чисел. Поэтому в идеале мы не должны перебирать весь список, если это необходимо. Также нам нужно избегать создания нового списка, который может иметь значительное потребление памяти. Использование всех и генератора решает проблему

 >>> x = [5, 10, 15, 20, 25] >>> all(x[i] - x[i-1] == x[i+1] - x[i] for i in xrange(1, len(x) - 1)) True 

Вы вычисляете дважды разницу между двумя элементами, для i = 2, n-2. возможно, вам следует извлечь diff в переменную и сравнить с ней.

itertools.izip отлично подходит для такого рода вещей:

>>> lst = [1,1,2,3,5,8] >>> [y-x for x, y in itertools.izip (lst, lst[1:])] [0, 1, 1, 2, 3] 

Вы также можете использовать itertools.starmap чтобы сделать его более эффективным: itertools.starmap(operator.sub, itertools.izip(lst[1:], lst))

Я пришел к этому во время игры:

>>> exm = [0,5,10,15,20,25,30,35] >>> len(set(exm[a + 1] - exm[a] for a in range(0, len(exm) - 1))) == 1 

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

Изменить: посмотрев cldy answer, вы можете остановить выполнение раньше, когда какой-либо элемент будет найден не таким, как ваш первоначальный разброс:

>>> exm = [0,5,10,15,20,25,30,35] >>> initial_diff = exm[1] - exm[0] >>> difference_found = any((exm[a + 1] - exm[a]) != initial_diff for a in range(1, len(exm) - 1)) 
>>> x=[10,15,20,25] >>> diff=(x[-1]-x[0])/(len(x)-1) >>> diff 5 >>> all(x[i]+diff==x[i+1] for i in range(len(x)-1)) True 

Здесь приведен пример использования функции diff в numpy .

import numpy numpy_array = numpy.zeros(10**6) for i in xrange(10**6): numpy_array[i] = i print numpy.any(numpy.diff(a) == 1) 

Здесь решение, использующее итераторы только для сравнения.. и, возможно, преимущество не в необходимости знать длину ваших входных данных; вы могли бы избежать того, чтобы миллионы элементов списка загружались в память в первую очередь.

from itertools import tee, izip # From itertools recipes: http://docs.python.org/library/itertools.html def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), . " a, b = tee(iterable) next(b, None) return izip(a, b) class DifferenceError(Exception): pass def difference_check(data): idata = pairwise(data) (a,b) = idata.next() delta = b - a for (a,b) in idata: if b - a != delta: raise DifferenceError("%s -> %s != %s" % (a,b,delta)) return True 

но для ускорения вы должны использовать список генератора вместо ручной итерации (встроенная функция быстрее). все (ba == дельта для a, b в idata)

Ещё вопросы

  • 1 данные с функцией return против возврата простого объекта данных
  • 1 Возможны ли два пакета в одном APK?
  • 0 Ошибка отладки в визуальной студии
  • 0 SDL_Surface отказывается от блиц
  • 1 Как поставить легенду Bokeh на «bottom_right»
  • 0 Сделайте верхнюю и нижнюю границу divs неровным краем
  • 0 Как издеваться над угловым сервисным методом, который принимает параметр
  • 0 Заполнить выпадающий из базы данных PHP
  • 0 Проблемы при попытке применить класс CSS к строкам
  • 1 Управлять порядком столбцов данных json, возвращаемых методом Json () в ASP.NET MVC
  • 0 Как сделать так, чтобы моя строка меню не выходила за пределы экрана?
  • 1 Обнаружение арабских символов в регулярных выражениях
  • 0 Добавить дополнительные btn-group onclick
  • 1 Не удалось выполнить NativeScript для задачи: ошибка при объединении архивов dex
  • 1 Как прочитать все данные из Firebase в виде списка
  • 1 Fluent Builder / DSL в Java на примере
  • 0 Ошибка «Необходимо указать поле grant_type» при получении токена Oauth2
  • 1 Как запросить «In clause» при сборе коллекции в Linq
  • 0 Создание приложения для создания заметок с использованием JQuery для мобильных телефонов и телефонов
  • 0 Скелетная страница css подменю ie7
  • 0 Как вставить новую строку в таблицу из дочернего контроллера в angularjs
  • 0 Получить любой HTML-элемент нажал на это и JQuery
  • 0 Вставка данных из базы данных в массив и внедрение этих данных в текстовую область
  • 0 Разница во времени между часами в ударах
  • 1 System.Windows.Forms.WebBrowser Проблема с доступом к сценарию
  • 1 Как я могу сделать цикл в XML-файле, который я получаю значение Attributte?
  • 0 Использование того же FK в таблицах Mutliple.
  • 0 Как отобразить сообщение об ошибке для нулевого значения, используя ноти?
  • 0 Флажок манипулирования вводом
  • 1 Как мне сделать многомерный регрессионный анализ в Python?
  • 1 Выдать URL при нажатии кнопки, когда она работает в фоновом режиме
  • 1 Получить одно значение из LiveData
  • 1 Как сделать np.where более эффективным с помощью треугольных матриц?
  • 1 Ошибка при выходе из окна Jframe
  • 1 В Splashscreen Activity внутри я реализовал интерфейс. Как отправить данные интерфейса на несколько Activity в Kotlin?
  • 0 Как сравнить две даты?
  • 0 Ошибка MySQL 1215: невозможно добавить ограничение внешнего ключа для типа данных геометрии POINT
  • 0 Codeigniter — передача нескольких значений для просмотра
  • 0 Скрытое поле не появляется в PHP-скрипте
  • 1 Как изменить цвет фона для определенных элементов виджета в RecycleView?
  • 0 Html электронная почта для outlook.com и gmail.com
  • 0 BST вставка с C ++
  • 0 Почему мой фон мигает белым при изменении свойства фона css с помощью набора переходов?
  • 0 Удалить escape-последовательности из разобранного HTML
  • 1 Панды: конвертировать дату ‘объект’ в int
  • 1 Не удается загрузить модуль Rampart в клиентском проекте Axis2
  • 1 Java Deep Clone — клонировать каждый элемент в ArrayList, если Cloneable, независимо от типа
  • 1 Цвет по 3 переменным — треугольник Максвелла
  • 0 Почему $ _POST не распознает определенные загруженные файлы?
  • 0 значения не отображаются с помощью угловой директивы

Источник

Как найти разность элементов массива A[N]? Python

если нужна разность по порядку (A[0] — A[1] — . — A[N]), то вот:

Для нахождения разности элементов в массиве A[N] в Python можно использовать следующий подход:

python
def find_difference(array): if len(array) < 2: return None # Если массив содержит менее двух элементов, разность неопределена else: difference = array[0] # Начальное значение разности равно первому элементу массива for i in range(1, len(array)): difference -= array[i] # Вычитаем каждый последующий элемент из разности return difference
python
my_array = [5, 2, 7, 1, 9] result = find_difference(my_array) print(result) # Вывод: -14

В данном примере функция find_difference принимает массив array и итерируется по элементам, начиная со второго элемента. Она вычитает каждый последующий элемент из текущей разности и возвращает полученное значение. Обратите внимание, что если массив содержит менее двух элементов, функция возвращает None , так как разность неопределена в таком случае.

Источник

Set Difference в Python

Python Set Difference в основном выполняет операцию разности для итерируемых объектов, и результат содержит разницу между ними.

Он содержит элементы, которые присутствуют в наборе (на котором вызывается операция), но не присутствуют в других наборах.

Диаграмма различий между наборами Python

Приведенная ниже диаграмма Венна дает гораздо лучшее понимание различий между наборами, чем любой текст.

Set Difference диаграмма

Методы поиска установочной разницы

Ниже приведены методы поиска разницы между несколькими наборами в Python:

  • Используя метод set difference()
  • Используя оператор «-»
  • Используя метод difference_update
  • Используя оператор «- =»

1 Разница с помощью метода difference()

Метод difference() обычно работает с итерациями, такими как String, List, Tuples и т. д.

Результатом метода difference() является новый набор в качестве вывода, который содержит все элементы из конкретного набора, для которого вызывается метод, которые отсутствуют в другом наборе, т.е. создает разницу между двумя наборами.

Если установить A = и установить B =

Затем набор A разностей набор B будет содержать все элементы, которые присутствуют в наборе A, но не в наборе B, то есть result = .

Примечание. Если какой-либо итерируемый объект, отличный от set, передается методу difference() в качестве аргумента, тогда метод сначала преобразует итеративный объект в наборы, а затем выполняет над ним операцию.

Синтаксис:
Set.difference(iterable_object) = Set Object
Пример:

Set_A = Set_B = Result = Set_A.difference(Set_B) print(Result); input_list = [1, 2, 3, 4, 5, 6, 7] #list Display = Set_A.difference(input_list) print(Display)

2 Использование оператора «-»

Оператор «-» также может использоваться для выполнения операции задания разности элементов. Он служит той же цели, что и метод difference().

Единственное различие между оператором «-» и методом difference() состоит в том, что оператор «-» работает только с заданными элементами, а последний работает с любым итеративным объектом.

Синтаксис:
SetA — SetB = Resultant_Set
Пример:

Set_A = Set_B = Result = Set_A - Set_B print(Result)

3 Использование метода difference_update()

Метод difference_update() также возвращает разницу между элементами набора из повторяемых объектов, таких как String, Lists, Tuples и т. Д.

В методе difference_update() результат разностной операции не сохраняется во вновь созданном наборе, а скорее обновляет тот же набор, на котором была выполнена операция.

Синтаксис:
Set.difference_update(iterable_object)
Пример:

Set_A = Set_B = print("Set_A before the difference operation: ", Set_A) Set_A.difference_update(Set_B) print("Set_A difference Set_B: ", Set_A);

Выход:
Set_A before the difference operation:
Set_A difference Set_B:

4 Использование оператора «- =»

Операторы «- =» работают аналогично методу difference_update, т.е. он выполняет операции разности с элементами набора и обновляет результат в том же наборе, для которого была выполнена операция разности.

Примечание. Оператор «- =» работает только с заданными объектами.

Синтаксис:
Set_A -= Set_B
Пример:

Set_A = Set_B = print("Set_A before the difference operation: ", Set_A) Set_A -= Set_B print("Set_A difference Set_B: ", Set_A);

Выход:
Set_A before the difference operation:
Set_A difference Set_B:

Источник

Найти разность положительных элементов списка

Найти разность положительных элементов и вывести ее на экран
Ввести массив А из 10 элементов, найти разность положительных элементов, и вывести ее на экран.

Сумма и разность элементов списка
Задача: Заполнить список из 10 элементов случайными числами, подсчитать сумму и разность элементов

Найти сумму элементов списка списков, имеющих заданную разность
Добрый день! Есть такая задача: Найти сумму элементов списка списков, имеющих заданную разность.

Найти среднее арифметическое положительных элементов списка
Найти средние арифметические положительных и отрицательных элементов списка.

Из списка произвольных чисел А[10] сформируйте два списка, содержащих номера положительных и отрицательных элементов
14. Из списка произвольных чисел А сформируйте два списка, содержащих номера.

Найти разность суммы квадратов элементов и произведения положительных элементов массива
Задан массив X. Напишите программу вычисления величины s = k1-k2, где k1 — сумма квадратов.

Найти разность положительных элементов массива
Дан массив A размерностью N. Организовать заполнение вручную. Найти разность положительных.

Найти разность максимального и минимального положительных элементов
Нужно в WindowsForms написать код для чекбокса. Задание" Найти разность максимального и.

Найти разность количества положительных и отрицательных элементов
Помогите, пожалуйста. Нужно переделать вторую часть, где идет работа с заданием 2. Там выполняется.

Источник

Оцените статью