2017-07-13 14 views
8

Jestem początkującym użytkownikiem języka Python. Próbuję przechowywać maksymalną wartość dwóch tablic w innej tablicy. Długość tablicy jest znane, więc stosowane c=[]*len(a)Obsługa tablic - Python

a=[3,4,6,8] 
b=[9,4,5,10] 
c=[]*len(a) 
for i in range(len(a)): 
    if (a[i]>b[i]): 
     c.append(a[i]) 
    else: 
     c.append(b[i]) 

mam następujące wyniki, co jest właściwe.

c=[9,4,6,10] 

Jeśli mam tablice jak

a=[[2,4],[6,8]] 
b=[[1,7],[5,9]] 

Jak należy postępować, aby zapisać to max wartość poszczególnych elementów w innej tablicy? Z góry dziękuję za pomoc.

+2

Jak zdefiniować maksymalną wartość w drugim przykładzie? Jakie są oczekiwane wyniki? – EarthDragon

+0

Jakie są oczekiwane wyniki? – hadi

+0

Nie widziałem odpowiedzi wyjaśnić, dlaczego nie potrzebujesz 'c = [] * len (a)' jeszcze, więc wyjaśnię to tutaj. Użycie '[] * len (a)' da ci '[]' dla dowolnego 'a', ponieważ w Pythonie tablice/listy nie muszą mieć zadeklarowanej długości przed ich użyciem. Więc możesz po prostu zrobić 'c = []' i zacząć dołączanie rzeczy do 'c'. Mam nadzieję, że mogę pomóc. – mattjegan

Odpowiedz

10

Można użyć zip() spięcia razem każdą listę i każdego podmenu, aby je porównać element mądry:

Make an iterator that aggregates elements from each of the iterables.

Returns an iterator of tuples, where the i-th tuple contains the i-th element from each of the argument sequences or iterables. [...].

>>> def max_value(lst1, lst2): 
     for subl1, subl2 in zip(lst1, lst2): 
      for el1, el2 in zip(subl1, subl2): 
       yield max(el1, el2) 


>>> 
>>> a=[[2,4],[6,8]] 
>>> b=[[1,7],[5,9]] 
>>> 
>>> list(max_value(a, b)) 
[2, 7, 6, 9] 

przypadku korzystania NumPy, można użyć numpy.maximum():

Element-wise maximum of array elements.

Compare two arrays and returns a new array containing the element-wise maxima. [...].

>>> import numpy as np 
>>> 
>>> a = np.array([[2,4],[6,8]]) 
>>> b = np.array([[1,7],[5,9]]) 
>>> 
>>> np.maximum(a, b) 
array([[2, 7], 
     [6, 9]]) 
>>> 
0

Aby obsłużyć wielowymiarowe tablice, można użyć dwóch zmiennych: i i j, który reprezentuje twoje wiersze i kolumny.

a=[[2,4],[6,8]] 
b=[[1,7],[5,9]] 
c=[]*len(a) 
for i in range(len(a)): 
    for j in range(len(a)): 
     if (a[i][j]>b[i][j]): 
      c.append(a[i][j]) 
     else: 
      c.append(b[i][j]) 
print(c) 

wyjściowa:

[2, 7, 6, 9] 

mam założyć c jest 1 tablica wymiarowa.

0
a=[[2,4],[6,8]] 
b=[[1,7],[5,9]] 
c=[]*len(a) 
for i in range(len(a)): #loop through the elements 
    for each in zip(a[i],b[i]): #for each number in a & b, zipped forming (2,1),(4,7) ... 
     c.append(max(each)) #append max number of each zipped pair to c 
print(c) #print c 
+1

Proszę podać wyjaśnienie na temat swojej odpowiedzi. Sam kod nie wystarczy. – Boiethios

+0

Dziękujemy za ten fragment kodu, który może zapewnić natychmiastową pomoc. Właściwe wyjaśnienie znacznie poprawi (https://meta.stackexchange.com/questions/114762/explaining-entirely-code-ans -answers) jego wartość edukacyjną, pokazując, dlaczego jest to dobre rozwiązanie problemu i uczynić go bardziej użytecznym dla przyszłych czytelników o podobnych, ale nie identycznych pytaniach. Zmodyfikuj swoją odpowiedź, aby dodać wyjaśnienie i podaj, jakie ograniczenia i założenia mają zastosowanie. – basvk

+0

@K. K Oba rozwiązania wyświetlają komunikat o błędzie "SyntaxError: nieprawidłowa składnia" na wydruku (c) oświadczenie –

1

W rozwiązaniu z jedną linią można użyć mapy i lambda. Na przykład, w tym wypadku roztwór może być

a=[[2,4],[6,8]] 
b=[[1,7],[5,9]] 
map(lambda x,y : map(lambda p,q : max(p,q),x,y),a,b) 
[[2, 7], [6, 9]] 

ponieważ i B są tablicy tablic pierwsze wejście lambda są tablice i następnej mapy odbywa maksimum pojedynczego elementu.