pythonで配列を与えたら

長さがN以上あったら配列の長さをNで打ち切り
Nに足りなかったら配列をそこまで伸ばして伸ばした分を0で埋める
という関数をどう書いたらいいでしょうか

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2016/03/23 19:00:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:quintia No.2

回答回数562ベストアンサー獲得回数71

ポイント50pt

リストの複製を作ってよくて、nがそれほど大きくない(サイズが何十万とか何百万とかではない)なら、

def adjust_list(l, n):
  return (l + [0] * n)[:n]

で十分だと思います。

実用上は関数化する必要もなく

l = (l + [0] * n)[:n]

で十分でしょう。

関数化しないといけないほど色んな所から呼ばれるとか、上の書き方での無駄な処理が気になるとか、そんな状況ならリストを頻繁に伸縮しなければならないロジックの方をどうにかする方が健全だと思うので。

その他の回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント50pt

ベタな書き方ですが、こんな感じで。

def adjust_list(list, n):
    ret = list[:]
    if len(ret) < n:
        ret += [0] * (n - len(ret))
    elif len(ret) > n:
        ret[n:] = []
    return ret


# test
list = [1, 2, 3, 4, 5]
print list
print adjust_list(list, 3)
print adjust_list(list, 8)
print adjust_list(list, 5)

引数で渡したリストを破壊せずに、長さを変更したリストを関数の戻り値にしてます。
もし、引数で渡したリスト自体を変更するのであれば、こんな感じで。

def adjust_list(list, n):
    if len(list) < n:
        list += [0] * (n - len(list))
    elif len(list) > n:
        list[n:] = []
id:quintia No.2

回答回数562ベストアンサー獲得回数71ここでベストアンサー

ポイント50pt

リストの複製を作ってよくて、nがそれほど大きくない(サイズが何十万とか何百万とかではない)なら、

def adjust_list(l, n):
  return (l + [0] * n)[:n]

で十分だと思います。

実用上は関数化する必要もなく

l = (l + [0] * n)[:n]

で十分でしょう。

関数化しないといけないほど色んな所から呼ばれるとか、上の書き方での無駄な処理が気になるとか、そんな状況ならリストを頻繁に伸縮しなければならないロジックの方をどうにかする方が健全だと思うので。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません