1

重複の可能性:
2 の累乗の数値のリストを返す方法は?

私が知っているのは次のとおりです。

l = []

for i in range(2, n=2):
    l.append(1**2)

return l

方程式全体を用意する必要はありません。このような方程式を作成する方法の基本を知る必要があるだけです。

4

3 に答える 3

2

これのことですか?

def get_powered_vals(endVal):
    return [2**val for val in xrange(endVal+1)]

get_powered_vals(4)
>>> [2,4,8,16]

またはリスト内包表記なし:

def get_powered_vals(endVal):
    vals = []
    for val in xrange(endVal+1):
        vals.append(2**val)
        print val, vals[-1]
    return vals

get_powered_vals(4)
>>> 1, 2
>>> 2, 4
>>> 3, 8
>>> 4, 16   
>>> [2,4,8,16]
于 2012-11-14T03:23:39.983 に答える
1

非効率な累乗の代わりに、最後に計算された値を取り、それを 2 で乗算します。

関数として:

>>> def powers(n):
...   ret = [1]
...   while len(ret) < n:
...     ret += [ret[-1]*2]
...   return ret
...
>>> powers(10)
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

ジェネレーターとして:

>>> def gen_powers(n):
...   last = 1
...   while n:
...     yield last
...     last *= 2
...     n -= 1
...
>>> list(gen_powers(10))
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

コードゴルフのワンライナーとして:

reduce(lambda a,b:a+[2*a[-1]],range(10),[1])
于 2012-11-14T05:59:17.883 に答える
1

このようなもの?

def powers(n):
    return [2**i for i in range(1, n+1)]

(詳細)

これは同じ方法ですが、for ループを使用します。

def powers(n):
    l = []
    for i in range(1, n+1):
        l.append(2**i)
    return l

上記のコード スニピットは、次の理由で機能しませんでした。

  • これはl.append(1**2)1 の 2 乗で、常に 1 に等しくなります。おそらくl.append(2**i)、変数の 2 乗であるを実行するつもりでした。i
  • 範囲を 2 から開始しましたが、リストの最初の用語が 4 ではなく 2 になるように、1 から開始したいとします。
  • 範囲の使い方が間違っています。範囲を指定するにはいくつかの方法があります

    range(stop) # Start のデフォルトは 0
    range(start, stop)
    range(start, stop, step) # 指定しない場合、step のデフォルトは 1

于 2012-11-14T03:31:04.920 に答える