2015-12-27 12 views
5

Czy istnieje funkcja w języku Python, aby uzyskać różnicę między dwiema lub więcej wartościami na liście? Tak więc, w tych dwóch listach:funkcja różnicy między wartością

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

muszę obliczyć różnicę między każdą wartość w listy1 i listy2.

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

Daje wartości ujemne, ale chcę odejmowania między wartościami dwóch wykazach wyłącznie od największej wartości do najmniejszej wartości nie otrzymania wartości ujemne.

Dla powyższych list, oczekuję, że wyjście będzie [3, 3, 3, 3].

Dzięki.

+3

pokazania swoich prób, jak również oczekiwane wyjście ... –

+1

Czekasz '[3, 3, 3, 3]'? – erip

Odpowiedz

6

Możesz także zrobić, jeśli w innym przypadku stan na liście zrozumiałe.

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

To jest to samo co '[abs (ij) dla i, j w zip (list1, list2)]' – erip

8

Albo zip listy lub użyj 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]) 

Pamiętaj, aby rzucić tablicę z powrotem do listy, ile potrzeba.

edit:

W odpowiedzi na nowy wymóg, że potrzebne są wartości bezwzględne: można dodać abs w listowego:

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

i roztwór numpy zmieniłoby się:

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

W zależności od tego, o co pytał pytający ... ta odpowiedź wygląda dobrze. – arcseldon

+1

Jestem prawie pewna, że ​​o to pytano ... w przeciwnym razie prosi @gho o wyjaśnienie;) – timgeb

+2

@timgeb, ja to zredagowałem, co z tego: [ab for a, b in zip (list1, list2) if if a> b else ba] – gho

10

Zakładając można oczekiwać [3, 3, 3, 3] jako odpowiedź na swoje pytanie, możesz użyć abs i zip:

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

Można użyć metody zip, aby połączyć te dwie listy. Zobacz tutoriale dla metody zip 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

To nie różni się od kilku już udzielone odpowiedzi. – erip

1

odpowiedź Avinasha Raja jest poprawna, lub alternatywnie, używając mapy():

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

To nie jest poprawne. OP chce * tylko elementów dodatnich * w tablicy. – erip

Powiązane problemy