关于python统计一个整数列表中不同数值种类数的问题。

下面这段代码中,kind_num用于统计那个整数列表中有几种不同数值的整数。

class Solution(object):
    def distributeCandies(self, candies):
        """
        :type candies: List[int]
        :rtype: int
        """
        loc = len(candies)
        mol = loc % 2
        if not (2 <= loc <= 10000) or mol != 0:
            return 'wrong length of array'
        for num in candies:
            if not (-10000 <= num <= 10000):
                return 'wrong element in array'

        kind_num = 0
        sis_num = loc / 2
        for candy in candies:
            kind_num += 1
            while True:
                try:
                    candies.remove(candy)
                    print candies
                except ValueError:
                    break
        if kind_num > sis_num:
            return sis_num
        elif kind_num < sis_num:
            return kind_num
        else:
            return sis_num


s = Solution()

print s.distributeCandies([1,1,2,2,3,3])

但是第二个for循环,没有取完candies里面的值就提前退出了,这是为什么???
图片描述

阅读 6.2k
3 个回答

在循环里不要去remove

如果你仅仅是想实现统计不同种类的值

#统计出现次数
lst = [1,1,2,2,3,3,4,4,5,6]
print len(set(lst))

#统计每种各出现几次
from collections import Counter
print dict(Counter(lst))

candies.remove(candy) 第一次执行 Ok, candy被remove; 由于while (True), 在同一次For 循环中 会无限remove 这个candy,但是这个candy 已经在第一次被移除了。所以break.

from collections import defaultdict

d = defaultdict(int)

for item in your_list:
    d[item] += 1
    
print d
推荐问题