如何使子列表由更大的列表中的唯一值组成 - python

时间:2016-03-12 03:31:46

标签: python list python-3.x unique

我有一个大型列表,我希望将其划分为具有唯一值的较小列表。

BigList = [2, 1, 0, 2, 2, 1, 2, 1, 0, 3, 0, 1, 3]

如何将其划分为较小的唯一值列表,这些列表最初位于较大的列表中(下面的所需输出):

L1 = [2, 1, 0]

L2 = [2]

L3 = [2, 1]

L4 = [2, 1, 0, 3]

L5 = [0, 1, 3]

请注意,每个子列表都没有重复值,它们可以具有不同数量的索引,并且所有子列表中的所有值都存在于原始列表中。

2 个答案:

答案 0 :(得分:3)

这是一个相当简单的方法:

lists = [[]]
for num in BigList:
    if num in lists[-1]:
        lists.append([])
    lists[-1].append(num)

它也保留了订单。这是它的工作原理:它遍历BigList中的每个数字。如果它已经存在于最后一个列表(lists[-1])中,我们将开始一个新列表。然后,我们将num添加到已创建的最后一个列表中。

答案 1 :(得分:0)

也可以使用reduce

reduce(lambda a, b: a[:-1] +[a[-1]+[b]] \
            if (b not in a[-1]) else a+[[b]],     
                 BigList[1:], 
                 [[BigList[0]]])

如果它是像Haskell这样的语言,它可能会被使用。但是,对于Python来说,这可能会带来性能。然而,对于足够小的列表来说,这是一个相对简单的实现......