人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: tak
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●50ポイント

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

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:] = []

2 ● quintia
●50ポイント ベストアンサー

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

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

で十分だと思います。

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

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

で十分でしょう。

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ