拆分列表并根据唯一的一组值创建分区(列表)

时间:2020-02-22 12:27:43

标签: python list

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)]

2 个答案:

答案 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'

如果只希望输出为TrueFalse,请尝试此操作。

def partition(lst):
    return len(set(Counter(lst).values()))==1