我有一个大型列表,我希望将其划分为具有唯一值的较小列表。
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]
请注意,每个子列表都没有重复值,它们可以具有不同数量的索引,并且所有子列表中的所有值都存在于原始列表中。
答案 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来说,这可能会带来性能。然而,对于足够小的列表来说,这是一个相对简单的实现......