1

binary_listのは、「000」、「001」、「010」、....の文字列のリストです。

各ビット列の 1 の数を辞書に追加しようとしています。辞書はn、文字列に現れる 1 の数ごとに のサイズで作成されます

ビットの文字列をリストに追加してから辞書に追加することはできないようです。コードを実行すると、次のようになります。

input: sortbits(3)

000
001
010
011
100
101
110
111
{0: [], 1: [], 2: []}

正しい出力は次のとおりです。

000
001
010
011
100
101
110
111
{0: [000], 1: [001, 010, 100], 2: [011,101, 110], 3: [111]}

私のコード:

def sortbit(n):
    max_num = 2**n
    binary_list = []
    for x in range(0,max_num):
        stringy = []
        for a in range(n):
            stringy.append(str(x%2))
            x //= 2
        print ''.join(reversed(stringy))

        stringy_list = ''.join(reversed(stringy))
        binary_list.append(stringy_list)

    count_dict = dict.fromkeys(range(0,n+1))

    for element in binary_list:
        count = 0
        value_list = []
        for character in element:
            if character == '1':
                count += 1
        for y in count_dict:
            if y == str(count):
                value_list.append(element)
            count_dict[y] = value_list 

    print count_dict
4

5 に答える 5

5
>>>strings=["000","001","010","011","100","101","110","111"]
>>>d={}
>>>for s in strings:
...     count = s.count("1")
...     if count not in d:
...             d[count]=[]
...     d[count].append(s)

>>>d
{0: ['000'], 1: ['001', '010', '100'], 2: ['011', '101', '110'], 3: ['111']}
于 2013-10-08T16:55:35.390 に答える
2

これは機能します:

>>> lst = ['000', '001', '010', '011', '100', '101', '110', '111']
>>> dct = {x:[] for x in xrange(max(map(len, lst))+1)}
>>> for item in lst:
...     dct[item.count('1')].append(item)
...
>>> dct
{0: ['000'], 1: ['001', '010', '100'], 2: ['011', '101', '110'], 3: ['111']}
>>>

おそらくこの部分を除いて、これはすべて非常に簡単なはずです: max(map(len, lst)). これが行うことは、 の項目の最大長を計算することlstです。この場合、最大の長さは 3 ですlst。4 文字の別の項目を追加すると (例: "1010")、最大の長さは 4 になります。

これは、 に配置するキーの数を決定するために必要ですdct。必要なキーの数は常に、アイテムの最大の長さlst+ 1 になります。

于 2013-10-08T16:55:20.003 に答える
2
from collections import defaultdict
def sortbit(n):
    d = defaultdict(list)
    max_val = 2**n
    for x in range(0,max_val):
       d[bin(x).count("1")].append("{0:0{1}b}".format(x,n))
    return d

少なくとも、これによりバイナリ値が自動的に n 幅になると思います

>>> sortbit(3)
defaultdict(<type 'list'>, {0: ['000'], 1: ['001', '010', '100'], 2: ['011', '10
1', '110'], 3: ['111']})
>>> sortbit(4)
defaultdict(<type 'list'>, {0: ['0000'], 1: ['0001', '0010', '0100', '1000'], 2:
 ['0011', '0101', '0110', '1001', '1010', '1100'], 3: ['0111', '1011', '1101', '
1110'], 4: ['1111']})
于 2013-10-08T16:57:32.030 に答える