19

私は言われています

数値の配列aを取り、平方の各値を含む配列を返す関数square(a)を記述します。

最初は

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

しかし、これは私が印刷しているので機能せず、私が尋ねられたように戻ってこない。だから私は試しました

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

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

4

9 に答える 9

40

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

def square(list):
    return [i ** 2 for i in list]

またはあなたはそれをすることができmapます:

def square(list):
    return map(lambda x: x ** 2, list)

または、ジェネレーターを使用することもできます。リストは返されませんが、それでも反復処理できます。また、新しいリスト全体を割り当てる必要がないため、他のオプションよりもスペース効率が高い可能性があります。

def square(list):
    for i in list:
        yield i ** 2

または、退屈な古いループを実行することもできますがfor、これは一部のPythonプログラマーが好むほど慣用的ではありません。

def square(list):
    ret = []
    for i in list:
        ret.append(i ** 2)
    return ret
于 2012-09-23T19:22:35.900 に答える
32

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

于 2012-09-23T19:19:42.620 に答える
8
import numpy as np
a = [2 ,3, 4]
np.square(a)
于 2017-11-09T20:43:02.903 に答える
2

numpyを使用します。

import numpy as np
b = list(np.array(a)**2)
于 2012-09-23T19:24:15.107 に答える
1
def square(a):
    squares = []
    for i in a:
        squares.append(i**2)
    return squares
于 2012-09-23T19:20:31.217 に答える
0

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

def square(a):
    return map(pow, a, [2]*len(a))
于 2012-10-20T19:31:17.580 に答える
0
def square(a):
    squares = []
    for i in a:
        squares.append(i**2)
    return squares

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

于 2015-12-15T05:51:38.453 に答える
0

できるよ

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

文字通り、次のようなリストを元のリストに追加します。

[_original_, _list_, _data_, [25, 9, 1, 4, 16]]
于 2016-10-08T16:06:55.780 に答える
-1
n = int(input())

final_list = [n**2 for n in range(1, n+1)]

print(final_list)
于 2021-05-19T08:02:49.170 に答える