毎朝Codewars@2019.06.06(木): Square(n) Sum
毎朝ちびちびCodewars。
Square(n) Sum [8級] www.codewars.com
今日のお題:
""" リストnumbersで与えられた各要素を二乗し、それらの合計値を返す def square_sum(numbers): Args: numbers (list): 要素はint型 Returns: 各要素の2乗の合計値 (int): """
Pythonを始めて9月で1年。
この辺でメリハリつけようと Python3 エンジニア認定基礎試験 を受けることにした。
受験勉強に時間を割きたいから、Codewarsはしばらくレベルを落として(7,8級あたり)、
通勤時間中 Pythonista 3 で書ける程度の中心に。
8級さすがに簡単。嬉しいっす (^^)。
Codewars はレベルが上がると ロジック考えるところとか、レアな例外を適切に処理するところとかに結構時間を取られるんだよね。
コード
リスト内包表記で書く
def square_sum(numbers): return sum([n**2 for n in numbers])
ジェネレータ式で書く
上記はリスト内包表記を使ったが、
sum()にはジェネレータ式 (n**2 for n in numbers)
で渡すことも可能。
ジェネレータ式を関数の唯一の引数として渡す場合には、丸括弧を省略できるので次のようになる。
def square_sum(numbers): return sum(n**2 for n in numbers)
- ジェネレータ式について(公式ドキュメント)
https://docs.python.org/ja/3/reference/expressions.html#generator-expressions - via. Pythonリスト内包表記の使い方 | note.nkmk.me
要素数が多いリストをリスト内包表記で生成してfor文でまわすような場合、
リスト内包表記を使うと最初に全要素を含むリストを生成するが、
ジェネレータ式を使うとループが繰り返されるごとに要素が一つずつ生成されるので、
メモリの使用量を抑えることができる。ジェネレータ式を関数の唯一の引数とする場合は丸括弧()を省略できる。