web-dev-qa-db-ja.com

リスト内のすべての要素を二乗する

に言われます

数値の配列aを取り、2乗の各値を含む配列を返す関数square(a)を作成します。

最初は

def square(a):
    for i in a: print i**2

しかし、私は印刷しているので、これは機能しません。だから私は試した

    def square(a):
        for i in a: return i**2

しかし、これは私の配列の最後の数を二乗するだけです。リスト全体を二乗するにはどうすればよいですか?

12
user1692517

リスト内包表記を使用できます:

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
30
Waleed Khan

リストの内包表記を使用します(これは純粋な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です:)およびmapsを必要とするlambdaベースのソリューション LCより遅い

26
import numpy as np
a = [2 ,3, 4]
np.square(a)
4
user3503711

Numpyを使用します。

import numpy as np
b = list(np.array(a)**2)
2
tacaswell
def square(a):
    squares = []
    for i in a:
        squares.append(i**2)
    return squares
1
Curious
def square(a):
    squares = []
    for i in a:
        squares.append(i**2)
    return squares

上記の関数を使用して、1-20の数値の2乗をどのように行うのでしょうか

0
Abrham Yep

できるよ

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]]
0
9 Guy

もう1つのマップソリューション:

def square(a):
    return map(pow, a, [2]*len(a))
0
hendrik