2017-07-13 10 views
8

私はPythonの初心者です。私は別の配列に2つの配列の最大値を格納しようとします。配列の長さは、私は私が正しい次の出力を得c=[]*len(a)配列の処理 - 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]) 

使用が知られています。

c=[9,4,6,10] 

私は別の配列の各要素の最大値を保存するために、これをどのように進めるべき

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

のような配列を持っている場合は?事前にあなたの助けをありがとう。

+2

2番目の例では最大値をどのように定義しますか?予想される出力は何ですか? – EarthDragon

+0

期待される出力は何ですか? – hadi

+0

なぜ私はあなたが 'c = [] * len(a)'を必要としないのか説明していないので、ここで説明します。 '[] * len(a)'を使うと、Pythonでは配列/リストの長さを宣言する必要がないので、 'a 'に' [] 'を渡すだけです。ですから実際に 'c = []'を実行して 'c 'に追加することができます。私が助けてくれることを願って。 – mattjegan

答えて

10

あなたは、要素ごとにそれらを比較するために一緒にそれぞれのリストと各サブリストを圧縮するzip()を使用することができます。

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] 

numpyのを使用している場合は、使用することができ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

多次元配列を扱うには、2つの変数iとを使用できますは行と列を表します。

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) 

は出力:

[2, 7, 6, 9] 

私はcは、1次元配列であると仮定しています。

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

答えについての説明を入力してください。コードだけでは十分ではありません。 – Boiethios

+0

このコードをご覧いただきありがとうございます。すぐに役立つかもしれません。適切な説明は、なぜこれが問題の良い解決策であるのかを示すことによって、その教育的価値を大幅に向上させるでしょう(https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)。類似しているが同一ではない質問を持つ将来の読者にとって、より有用なものにする。説明を追加するためにあなたの答えを編集し、どのような制限と前提が適用されるかを示してください。 – basvk

+0

@K。 K両方のソリューションでprint(c)文のエラーメッセージ "SyntaxError:invalid syntax"が返される –

1

マップとラムダを使うことができます。例えばこの場合、溶液をので両方のB

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]] 

可能な第1ラムダ入力配列の配列である配列され、その後、次のマップは、個々の要素の最大値をとります。