gpt4 book ai didi

python - 如何根据特定要求检查列表是否离完美仅一步之遥?

转载 作者:行者123 更新时间:2023-12-04 15:00:13 24 4
gpt4 key购买 nike

假设有一个名为 my_list 的列表,它最多可以有 4 个不同的唯一值,例如my_list = ['d','a','d','c','d','c','b','a','b']。如果在列表的唯一元素中,任何元素至少出现 3 次,另一个元素至少出现 2 次,另一个元素至少出现 1 次,我们称 my_list 为完美列表。例如,my_list = ['d','a','d','c','d','c','b','a','b'] 是符合标准,因为出现的次数如下:

'd' = 3 (at least 3 times)
'a' = 2 (at least 2)
'c' = 2 (at least 1)
'b' = 2 (at least 2)

因此满足至少重复 3、2 和 1 次的要求,而 another_list = ['d','a','d','c','d','b'] 并不完美,因为:

'd' = 3 
'a' = 1
'c' = 1
'b' = 1

所以 3、2、1 的要求不存在。请注意,顺序无关紧要。在another_list中,如果我们只加一个'a'或一个'c'或一个'b',那么它就完美了;也就是说,离完美只差一步。我正在寻找一个接受列表并返回 True 的函数,如果该列表距离完美仅一步之遥;否则,它返回 False。我的编码如下:

def fun(some_list):

unique = list(set(some_list))

dict = {}
for i in unique:
dict[i] = unique.count(i)

counts = list(dict.values())

它找到列表中唯一元素的计数,但我需要帮助来完成该功能,以根据上述解释检查列表是否离完美有一步之遥。

最佳答案

您可以使用collections.Counter:

import collections
def almost_perfect(d):
r = collections.Counter(d)
c = {b:a for a, b in r.items()}
k = [i for i in range(1, 4) if i not in c]
return len(k) == 1 and (k[0]+1 in c or any(i+1 == k[0] and sum(j == i for j in r.values()) > 1 for i in c))

vals = ['d','a','d','c','d','b']
vals1 = ['a', 'a', 'b', 'b', 'c', 'd']
vals2 = ['d', 'a', 'a', 'c']
print(almost_perfect(vals))
print(almost_perfect(vals1))
print(almost_perfect(vals2))

输出:

True
True
False

关于python - 如何根据特定要求检查列表是否离完美仅一步之遥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67080607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com