2015-12-27 2 views
5

Есть ли функция в Python, чтобы получить разницу между двумя или более значениями в списке? Таким образом, в этих двух списках:Функция разницы между значением

list1 = [1, 5, 3, 7] 
list2 = [4, 2, 6, 4] 

Мне нужно рассчитать разницу между каждым значением в списке1 и списке2.

for i in list1: 
    for ii in list2: 
     print i -ii 

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

Для приведенных выше списков я ожидаю, что выход будет [3, 3, 3, 3].

Спасибо.

+3

показать свои попытки, а также ожидаемый результат ... –

+1

вы ожидаете '[3, 3, 3, 3]'? – erip

ответ

6

Вы также можете сделать, если еще условие внутри списка понимание.

>>> [i-j if i>j else j-i for i,j in zip(list1, list2)] 
[3, 3, 3, 3] 
+7

Это то же самое, что и '[abs (ij) для i, j в zip (list1, list2)]' – erip

8

Либо zip списки, или использовать numpy:

>>> list1 = [1, 5, 3, 7] 
>>> list2 = [4, 2, 6, 4] 
>>> [a-b for a,b in zip(list1, list2)] 
[-3, 3, -3, 3] 
>>> import numpy as np 
>>> np.array(list1) - np.array(list2) 
array([-3, 3, -3, 3]) 

Не забудьте привести массив обратно в список по мере необходимости.

редактировать:

В ответ на новые требования, которые необходимы абсолютные значения: вы можете добавить abs в списке понимание:

>>> [abs(a-b) for a,b in zip(list1, list2)] 
[3, 3, 3, 3] 

и numpy решение изменится на:

>>> map(abs, np.array(list1) - np.array(list2)) 
[3, 3, 3, 3] 
+1

В зависимости от того, что задавал вопрошающий ... этот ответ выглядит хорошо. – arcseldon

+1

Я уверен, что это то, о чем просили ... в противном случае я прошу @gho прояснить;) – timgeb

+2

@timgeb, я его отредактировал, что об этом: [ab для a, b в zip (list1, list2) if a> b else ba] – gho

10

Предполагая, что вы ожидаете [3, 3, 3, 3] в ответ на свой вопрос, вы можете использовать abs и zip:

[abs(i-j) for i,j in zip(list1, list2)] 
2

Вы можете использовать метод зип, чтобы объединить эти два списка. Смотрите учебники по методу зип https://docs.python.org/2/library/functions.html#zip

>>> list1 = [1, 5, 3, 7] 
>>> list2 = [4, 2, 6, 4] 
>>> [abs(x-y) for x, y in zip(list1, list2)] 
[3, 3, 3, 3] 
+0

Это ничем не отличается от некоторых из уже предоставил ответы. – erip

1

ответ Авинаша Raj является правильным, или в качестве альтернативы, используя карту():

from operator import sub 
C = map(sub, A, B) 
+0

Неправильное использование. OP хочет * только положительные элементы * в массиве. – erip

Смежные вопросы