回答
使用真棒collections
模塊。
>>> from collections import Counter
>>> binary = bin(20)[2:]
>>> Counter(binary)
Counter({'0': 3, '1': 2})
或者你可以使用內置的功能count()
:
>>> binary = bin(20)[2:]
>>> binary.count('1')
2
甚至:
>>> sum(1 for i in bin(20)[2:] if i == '1')
2
但是,最後的解決辦法是比使用count()
>>> num = 20
>>> bin(num)[2:].count('1')
2
你正在尋找被稱爲Hamming weight什麼,並且有很多的算法來做到這一點。下面是另一個簡單的一個:
def ones(n):
w = 0
while (n):
w += 1
n &= n - 1
return w
&=做什麼? – jimifiki 2013-03-21 07:31:35
'a&= b'等價於'a = a&(b)'。'&'是[按位與運算符](http://docs.python.org/2/reference/expressions.html#binary-bitwise-operations)。 – Cairnarvon 2013-03-21 07:33:02
的常用方法,使這個致盲快是使用查找表:
table = [bin(i)[2:].count('1') for i in range(256)]
def pop_count(n):
cnt = 0
while n > 0:
cnt += table[n & 256]
n >>= 8
return cnt
在Python中,使用bin
和list.count
會更快的任何解決方案,但這是好的如果你想用匯編編寫它。
如果你正在使用匯編,'n&255'將顯着快於'n%256'。 – Cairnarvon 2013-03-21 06:57:23
確實,相應地更新了代碼。謝謝。 – 2013-03-24 10:48:05
你的代碼有一個錯字,你寫了'n&256'而不是'n&255'。 – 2017-12-14 11:21:25
我是一個新的編碼器,我發現這個邏輯很簡單。新手可能更容易理解。
def onesInDecimal(n):
count = 0
while(n!=0):
if (n%2!=0):
count = count+1
n = n-1
n = n/2
else:
n = n/2
return count
- 1. 計算給定列表中的偶數
- 2. 計算兩個整數
- 3. 如何計算向量中的個數,給定一個上限
- 4. 如何計算給定整數列表的確切目標值
- 5. 如何計算給定PDF中給定單詞的數量?
- 6. 計算兩個給定數字之間的百分比給定的數字
- 7. 計算數組中整數的總和
- 8. 計算C中的整數數
- 9. 計算整數中的有效數字
- 10. 計算整數和一個浮點數
- 11. 長整數計算
- 12. 算多少整數值是一個給定的字符串中
- 13. 如何計算python中的給定數組中的子數組?
- 14. 計算給定月份的週數
- 15. 給定值的計算百分位數
- 16. 計算C中整數中特定數字的出現
- 17. 實現一個函數計算正整數的數量,包括至少n個給定數組中的至少一個素數整除的數量
- 18. 計算數組中所有兩個數字整數的總和
- 19. 在一個整數中計算1的個數C
- 20. MATLAB計算一個整數的長度
- 21. M的計算在LCM N個整數
- 22. 在iOS中計算非整數指數
- 23. 離散數學:給定一組整數,置換,計算保持相同位置的整數的預期數量
- 24. 如何計算樹中給定算法的節點數量?
- 25. 一個遞歸算法來查找數組中的兩個整數,並將其相加成給定的整數
- 26. 計算給定數字中的所有可能數字
- 27. 計算給定數組中的反轉次數
- 28. 如何計算給定數組列中非零值的數量?
- 29. 計數整數中的設定位數?
- 30. 給定兩個uint8_t數組,計算128個元素的SAD
沒有理由對此使用'Counter' – jamylak 2013-03-21 07:02:42
即使是製作Counter的人也沒有使用它來解決這個問題;) – jamylak 2013-03-21 07:19:01
@jamylak這仍然是一個解決方案:) – TerryA 2013-03-21 08:14:27