に言われます
数値の配列aを取り、2乗の各値を含む配列を返す関数square(a)を作成します。
最初は
def square(a):
for i in a: print i**2
しかし、私は印刷しているので、これは機能しません。だから私は試した
def square(a):
for i in a: return i**2
しかし、これは私の配列の最後の数を二乗するだけです。リスト全体を二乗するにはどうすればよいですか?
リスト内包表記を使用できます:
def square(list):
return [i ** 2 for i in list]
または、map
it:
def square(list):
return map(lambda x: x ** 2, list)
または、ジェネレーターを使用できます。リストは返されませんが、それでも繰り返し処理できます。また、新しいリスト全体を割り当てる必要がないため、他のオプションよりもスペース効率が高い可能性があります。
def square(list):
for i in list:
yield i ** 2
または、退屈な古いfor
- loopを実行できますが、これはPythonプログラマーが好むほど慣用的ではありません:
def square(list):
ret = []
for i in list:
ret.append(i ** 2)
return ret
リストの内包表記を使用します(これは純粋なPythonで行う方法です):
>>> l = [1, 2, 3, 4]
>>> [i**2 for i in l]
[1, 4, 9, 16]
または numpy (十分に確立されたモジュール):
>>> numpy.array([1, 2, 3, 4])**2
array([ 1, 4, 9, 16])
numpy
では、配列の数学演算はデフォルトで要素ごとに実行されます。 **2
配列全体。
他の可能な解決策はmap
ベースになりますが、この場合はリストの理解に行きます。それはPythonicです:)およびmap
sを必要とするlambda
ベースのソリューション LCより遅い 。
import numpy as np
a = [2 ,3, 4]
np.square(a)
Numpyを使用します。
import numpy as np
b = list(np.array(a)**2)
def square(a):
squares = []
for i in a:
squares.append(i**2)
return squares
def square(a):
squares = []
for i in a:
squares.append(i**2)
return squares
上記の関数を使用して、1-20の数値の2乗をどのように行うのでしょうか
できるよ
square_list =[i**2 for i in start_list]
返す
[25, 9, 1, 4, 16]
または、リストに既に値がある場合
square_list.extend([i**2 for i in start_list])
返す
[25, 9, 1, 4, 16]
注:したくない
square_list.append([i**2 for i in start_list])
リスト内のリストを返すため:
[[25, 9, 1, 4, 16]]
もう1つのマップソリューション:
def square(a):
return map(pow, a, [2]*len(a))