ベタな書き方ですが、こんな感じで。
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]
で十分でしょう。
関数化しないといけないほど色んな所から呼ばれるとか、上の書き方での無駄な処理が気になるとか、そんな状況ならリストを頻繁に伸縮しなければならないロジックの方をどうにかする方が健全だと思うので。