Saya mencoba untuk mengelompokkan string biner angka-angka tertentu berdasarkan berapa banyak 1 yang ada dalam string.
Ini tidak berfungsi:
s = "0 1 3 7 8 9 11 15"
numbers = map(int, s.split())
binaries = [bin(x)[2:].rjust(4, '0') for x in numbers]
one_groups = dict.fromkeys(range(5), [])
for x in binaries:
one_groups[x.count('1')] += [x]
Kamus yang diharapkan one_groupsperlu
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
Tapi saya mengerti
{0: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
1: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
2: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
3: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
4: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111']}
Sejauh ini satu-satunya hal yang berhasil adalah jika saya menggunakan one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x]alih-alihone_groups[x.count('1')] += [x]
Tapi mengapa begitu? Jika saya ingat dengan benar, bukankah dict[key]seharusnya mengembalikan nilai kamus itu, mirip dengan cara dict.get(key)kerjanya? Saya telah melihat utas ini Mengapa dict.get (kunci) alih-alih dict [kunci]? tetapi tidak menjawab pertanyaan saya untuk kasus khusus ini, karena saya tahu pasti program ini tidak dimaksudkan untuk mendapatkanKeyError
Saya juga sudah mencoba one_groups[x.count('1')].append(x)tetapi ini tidak berhasil.
bin(x)[2:].rjust(4, '0')bisa disederhanakan menjadi '{:0>4b}'.format(x).
binariestidak relevan dengan pertanyaan, jadi Anda bisa memberikan nilainya.
getkembaliNonejika kunci tidak ada atau nilai default yang disediakan, sementara operator indeks[]meningkatkan kesalahan jika kunci tidak ada.