-2

各桁が 3 より小さい長さ X のすべての数字のリストを Python で作成する必要があります。たとえば、長さ 4 の場合など [[0000],[0001],[0002],[0010],[0011],...]です。いくつかのアイデアがあります。しかし、優れたパフォーマンスの高いソリューションは思いつきません。

私は次のことを考えました:

  1. 「各数値の桁数は 2 未満ですか」という関数を作成します。
  2. 9999 個の数字をループして、関数を実行します。次に、リストに追加します。

要約すると、3 を底とする x 未満のすべての数値をリストしたいと思います。

編集: これは役に立ちます: [(x,y,z) for x in xrange(3) for y in xrange(3) for z in xrange(3)]. 出力ポットがジェネレーターにあることは、私にとってさらに良いことです。しかし、この答えは動的ではありません。長さを変えることはできません。

4

4 に答える 4

3

以下は、まさにあなたが求めたものではありませんが、それに近いものです:

from itertools import product

def create_list(x):
    return list(product(range(3), repeat=x))

print create_list(3)

これは印刷されます:

[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2),
 (0, 2, 0), (0, 2, 1), (0, 2, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2),
 (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2),
 (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 1, 0), (2, 1, 1), (2, 1, 2),
 (2, 2, 0), (2, 2, 1), (2, 2, 2)]
于 2013-10-26T06:05:53.790 に答える
3

使用itertools.product:

[''.join(map(str,tup)) for tup in product(range(3),repeat=4)]

[0000] は単に [0] として表示されるため、それらを文字列に結合しました。join(map(str...それらをタプルのままにして、すべてのマンボジャンボを取り除くことができます。その場合、リストカンプさえ必要ありません。

list(product(range(4),repeat=3))
于 2013-10-26T06:07:45.273 に答える
1
inputBase, expectedSize = 2, 3

def convertToBase(num, base):
    result, current = [], 0
    if not num: result.append(0)
    while num:
        result.append((num % base))
        current += 1
        num /= base
    result.reverse()
    return result, current

currentNum, result = 0, []
while True:
    based, size = convertToBase(currentNum, inputBase)
    if size > expectedSize: break
    while len(based) < expectedSize:
        based.insert(0, 0)
    result.append(based)
    currentNum += 1

print result

出力:

[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]

変えるだけ

inputBase, expectedSize = 2, 3

任意のベースと必要な桁数に。

于 2013-10-26T06:01:06.433 に答える
1
  1. すべての応答を順序付けて、それぞれが他の応答の前または後に来るようにするルールを考え出します。

  2. 最初の応答を見つけるコードを記述します。

  3. 応答が最後の応答かどうかを判断するコードを記述します。

  4. 応答を次の応答に変換するコードを記述します。

これで、アルゴリズムは自明です。

  1. 上記からの最初の応答にインジケーターを設定し2ます。

  2. インジケーターの現在の値を出力します。

  3. インジケータが上記からの最後の応答である場合は3、停止します。

  4. 上記を使用してインジケーターをインクリメントし4ます。

  5. 手順 2 に進みます。

数字で並べることをお勧めします。4 桁 4 桁で、0000、0001、0002、0010、0011 などになります。最初の応答はすべてゼロです。最後の応答はすべて 2 です。これにより、コードを記述して次の応答にインクリメントするという問題が残ります。

于 2013-10-26T05:39:34.637 に答える