我正在尝试创建一个程序,以便用户输入一个数字列表,然后返回包含唯一元素的一系列列表/子列表。
实施例。 输入[5,5,5,3,1,0]将返回[[0],[1],[3],[5,5,5]] 输入[6,7,8]会返回[[6],[7],[8]]
我的方法是创建一个功能:
1.首先按数字排序(我知道这不是任务所必需的)
我计算了整个集合中任何数字出现的次数
3.然后我计算了列表中发生的子列表或唯一元素的数量
4.然后我尝试使用for语句进行切片,但是我得到了一个'列表索引超出范围错误',所以我不再尝试了。
我修改了,目前我的代码是 除去
我正在尝试将A分成Q列表,这样我就可以操纵列表来给我我想要的东西(元素打印出它最初出现的次数)。
很抱歉,如果这有点不清楚,或者我提供了不必要的信息。最终,我正在寻找帮助将列表拼接到表格中的Q次: __ 列表[0] 列表[1] ... 列表[Q] __
我的for loop
出错了。如果有另一种方式这样做,我会很感激指导。如果我以错误的方式解决这个问题,并且有一个更简单的解决方案,我愿意听到它。
谢谢。
答案 0 :(得分:1)
工作太多了。
3>> [list(y) for x,y in itertools.groupby(sorted([5,5,5,3,1,0]))]
[[0], [1], [3], [5, 5, 5]]
答案 1 :(得分:0)
我认为你使用set()
对象走在正确的轨道上,只是以稍微不同的方式使用它。
def grouper(sequence):
groups = []
for i in set(sequence):
groups.append([x for x in sequence if x == i])
return groups
>>> grouper(range(6))
[[0], [1], [2], [3], [4], [5]]
>>> grouper([1, 1, 2, 3])
[[1, 1], [2], [3]]
>>> grouper([1, 1, 2, 3, 5, 3, 4, 3])
[[1, 1], [2], [3, 3, 3], [4], [5]]
>>>
这当然假设你不能使用itertools
lib。
编辑:因为我无法抗拒但是试着把它变成一个单行:P
result = [[x] * sequence.count(x) for x in set(sequence)]