一种干净的方法来在列表中找到3个x实例和2个y实例?

时间:2018-10-02 03:35:20

标签: python

不,这不像使用count()

那样简单

我有一个从0到9的5个随机整数的列表。我想检查这些整数中的3个是否相同,是否其余2个相同但与其他3个不同。

我的想法是使用set()来计算列表中存在的出现次数,但这还包括存在4个相同的整数和1个孤立的整数的情况,例如:

nums = [4, 4, 4, 2, 2]
if len(set(nums)) == 2:
    print(set(nums))

>> {4, 2}


nums = [4, 4, 4, 4, 2]
if len(set(nums)) == 2:
    print(set(nums))

>> {4, 2}

我一直试图找到一种方法来排除4x1的情况,但是我想出的一切似乎都是令人费解的,并且是一种不道德的做法,因此需要保持清洁。我想知道是否可能有更好的方法而不使用set()?

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

您可以使用以数字作为键,以值作为频率的字典

from collections import Counter
nums = [4, 4, 4, 2, 2]

freq_dict = dict(Counter(nums))
print(freq_dict)

会给你这个:

{4: 3, 2: 2}

,然后我们可以检查字典的长度为2的条件,否则意味着它有两个以上相同的元素。

if len(freq_dict) == 2:

    for key, value in freq_dict.items():
        if value == 2 or value == 3:
            print("Given that there are 5 items and the length of the list is 2, it has to be the case that \ 
                  the other integer appears {} times".format(5 - value))
            print(key)
            break

        else:
            print("Nope")