将列表拆分为每个唯一元素

时间:2014-10-21 16:54:31

标签: list python-3.x split

我正在尝试创建一个程序,以便用户输入一个数字列表,然后返回包含唯一元素的一系列列表/子列表。

实施例。 输入[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出错了。如果有另一种方式这样做,我会很感激指导。如果我以错误的方式解决这个问题,并且有一个更简单的解决方案,我愿意听到它。

谢谢。

2 个答案:

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