Python 3:如何统计列表中各二进制字符串的1的个数?
解决你的两个Python统计问题
咱们一步步来拆解这两个需求:
需求1:统计列表内数字二进制形式中1的总数
假设你的列表里是一组整数(比如对应需求2里二进制字符串的原数字:[28, 67]),要统计所有数字二进制里1的总个数,你可以这么做:
- 对每个数字用
bin()函数转成带0b前缀的二进制字符串 - 用
count('1')统计单个二进制字符串里1的数量 - 最后把所有结果加起来得到总数
示例代码:
nums = [28, 67] # 一行代码直接计算总数 total_ones = sum(bin(num).count('1') for num in nums) print(total_ones) # 输出6,因为28的二进制有3个1,67的二进制也有3个1 # 如果需要先得到每个数字的1的个数列表,再求和 count_per_num = [bin(num).count('1') for num in nums] total_ones = sum(count_per_num) print(count_per_num) # 输出[3, 3] print(total_ones) # 输出6
需求2:统计列表中每个二进制字符串的1的个数
你之前用z.count('1')得到0,是因为列表的count()方法是用来找列表里完全等于参数的元素的数量——你的列表z里的元素是'0b111000'和'0b1000011',没有哪个元素是'1',所以自然返回0啦。
要实现你想要的[3,3],得遍历列表里的每个字符串,对每个字符串单独统计其中'1'的数量,用列表推导式就很方便:
z = ['0b111000','0b1000011'] result = [s.count('1') for s in z] print(result) # 输出[3, 3]
这里的s会依次取列表里的每个二进制字符串,s.count('1')会统计该字符串中所有'1'字符的数量,最终生成的列表就是每个元素对应的1的个数,完美符合你的期望。
内容的提问来源于stack exchange,提问作者m.d venkatesh
相关产品推荐
相关产品推荐

