deck = [1,2,3,4,4,3,2,1]
输出:True
说明:可能的分区[1,1],[2,2],[3,3],[4,4]
。
输入:deck = [1,1,1,2,2,2,3,3]
输出:False
说明:没有可能的分区。
我尝试过的解决方案非常非常基础,但是我无法解决其他问题。附注:我正在开始编码经验。
v=[1,2,3,4,4,3,2,1]
t=list()
flag=0
for i in v:
t.append(v.count(i))
for i in range(len(t)):
for j in range(len(t)):
if(t[i]==t[j]):
flag=0
else:
flag=1
if(flag==1):
print("NO")
else:
q=len(list(set(v)))
n = q
lists = [[] for _ in range(n)]
答案 0 :(得分:1)
尝试一下:
工作原理-遍历所有列表并存储每个值的出现。然后,它由一组组成。如果set的长度为1,即每个数字出现的次数完全相同,则返回true。
编辑-集具有其元素不重复的属性。假设如果dikt
的值为{1: 3, 2:3, 3:3}
,那么dikt.values
的值为[3,3,3]
。进行设置将是(3)
。
如果dikt
的值为{1:3, 2:3, 3:2}
,则集合为(3, 2)
def foo(x):
dikt = {}
for i in x:
if i in dikt.keys():
dikt[i]+=1
else:
dikt[i] = 1
return len(set(dikt.values())) == 1
答案 1 :(得分:1)
您可以在此处使用Counter
。
from collections import Counter
def partition(lst):
count=Counter(lst)
if len(set(count.values()))>1:
return 'No partition'
else:
return [[i]*n for i,n in count.items()]
deck = [1,2,3,4,4,3,2,1]
partition(deck)
#[[1, 1], [2, 2], [3, 3], [4, 4]]
deck=[1,1,1,2,2,2,3,3]
partition(deck)
#'No partition found'
如果只希望输出为True
或False
,请尝试此操作。
def partition(lst):
return len(set(Counter(lst).values()))==1