3

base=10変数を使用して辞書をdigits=set(range(10))作成し、0 から 999 までの各整数を、その整数を基数 10 で表す 3 桁のリストにマップする内包表記を作成する必要があります。つまり、値は次のようになります。

{0: [0, 0, 0], 1: [0, 0, 1], 2: [0, 0, 2], 3: [0, 0, 3], ...,10: [0, 1, 0], 11: [0, 1, 1], 12: [0, 1, 2], ...,999: [9, 9, 9]}

ハマった 。

私は何かを試しました

{q:[x,y,z] for q in list[range(1000)] for x in digits for y in digits for z in digits}   

しかし、インデックスqx * base**2 + y * base**1 + z * base**0

これは正しい考え方ではありません。

4

10 に答える 10

3
alphabet =  range(10)
base = 10
dict((x*base**2+y*base+z,(x,y,z)) for x in alphabet 
                                  for y in alphabet 
                                  for z in alphabet )

あなたが望むものです...私は思う

alphabet =  range(2)
base = 2
dict((x*base**2+y*base+z,(x,y,z)) for x in alphabet 
                                  for y in alphabet 
                                  for z in alphabet )

生成する

{0: (0, 0, 0), 1: (0, 0, 1), 2: (0, 1, 0), 3: (0, 1, 1), 4: (1, 0, 0), 5: (1, 0, 1), 6: (1, 1, 0), 7: (1, 1, 1)}
于 2013-07-16T21:43:39.690 に答える
2

divmod各数値を分解するために使用できます。

d = {}
for i in xrange(base**3):
    a,b = divmod(i, base**2)
    b,c = divmod(b, base)
    d[i] = [a,b,c]

または、めったに使用されないreduce関数を使用した建設的な解決策:

from itertools import product
d = {reduce(lambda x,y: base*x+y, p):list(p) for p in product(xrange(base), repeat=3)}
于 2013-07-16T21:44:21.770 に答える
1

あなたのコードにはいくつか間違っていることがあります:

  • list型である を配列として使用します。多分あなたは書くつもりでしたlist(range(1000))か?range(1000) を使用してください。
  • あなたfor q in range(1000)は多すぎます: 10*10*10 ループではなく、合計 1000*10*10*10 のループがあります。

コードをあまり変更せずに、次のように記述します (コードを使用して q を計算します)。

{(x*base**2 + y*base**1 + z*base**0):[x,y,z] for q in list[range(1000)] for x in digits for y in digits for z in digits}
于 2013-07-16T21:51:51.163 に答える
1
f= lambda x : [int(x/100),int(x/10)%10,x%10]
k={}
for p in xrange(0,1000):
   k[p]=f(p)

あるいは:

d = {x: [int(x/100),int(x/10)%10,x%10]  for x in xrange(0,1000)}
于 2013-07-16T21:47:31.630 に答える
0

友達に感謝します。解決策を見つけました。私は初心者なので、このようなことを理解する最も簡単な方法だと思います

ベース = 10

桁数 = セット (範囲 (10))

dict = {(x*base**2 + y*base**1 + z*base**0):[x,y,z] 数字の x の場合 y の数字の場合 z の数字の場合}

于 2013-07-18T20:35:44.997 に答える
0

これにより、ベースを変更できます。

import numpy as np
base = 10
nmax = 10
fill = len(np.base_repr(nmax, base=base))
d = {q:map(int, list(np.base_repr(q, base=base).zfill(fill))) for q in range(nmax+1)}
print(d)

str.zfillの文字列結果numpy.base_reprを、指定された長さになるまでゼロで埋めます (私の場合は埋めます)。

についてbase=10は、nmax=10(あなたが望むでしょうnmax=999)。

{0: [0, 0], 1: [0, 1], 2: [0, 2], 3: [0, 3], 4: [0, 4], 5: [0, 5], 6: [0, 6], 7: [0, 7], 8: [0, 8], 9: [0, 9], 10: [1, 0]}

base=2場合nmax=10:

{0: [0, 0, 0, 0], 1: [0, 0, 0, 1], 2: [0, 0, 1, 0], 3: [0, 0, 1, 1], 4: [0, 1, 0, 0], 5: [0, 1, 0, 1], 6: [0, 1, 1, 0], 7: [0, 1, 1, 1], 8: [1, 0, 0, 0], 9: [1, 0, 0, 1], 10: [1, 0, 1, 0]}
于 2013-07-17T02:56:09.990 に答える