Python 将列表中的元素分组
Python在向嵌套列表追加值时抛出错误。我正在尝试按相同的编号对列表进行排序。如果我有一个输入Python 将列表中的元素分组,python,python-3.x,list,Python,Python 3.x,List,Python在向嵌套列表追加值时抛出错误。我正在尝试按相同的编号对列表进行排序。如果我有一个输入([1,2,1,1,2])我希望它作为[[1,1,1],[2,2]放在嵌套列表中 def find_it(seq): seq_count = [[]] seq_copy = seq for i in range(0, len(seq)): for k in seq_copy: if seq[i] == k:
([1,2,1,1,2])
我希望它作为[[1,1,1],[2,2]
放在嵌套列表中
def find_it(seq):
seq_count = [[]]
seq_copy = seq
for i in range(0, len(seq)):
for k in seq_copy:
if seq[i] == k:
seq_count[i].append(k)
print(seq_count)
find_it([1, 2, 1, 1, 2])
所需输出:
[[1, 1, 1] ,[2, 2]]
python的方法是使用
集合中的计数器:
from collections import Counter
seq_count = [[i]*c for i,c in Counter(seq).items()]
产生[[1,1,1],[2,2]]
如果您想使用显式循环,对于seq中的每个i
,您必须首先循环seq\u count
,检查是否有一个项目将i
作为其第一个元素。如果是,则附加到该子列表,如果不生成新的子列表。如果您想这样做,初始化seq_count
为[]
而不是[[]]
。仅当您有需要的项目时生成子列表。seq_count[i]在这里,您在list seq\u count中只有1个嵌套列表项,但您正在访问seq\u count的第i项,所以这就是您出错的原因。请解释您试图执行的操作。这样,我们可以为您的代码提供帮助。顺便说一句,您可以将范围(0,len(seq))
替换为范围(len(seq))
您想要实现什么?为什么需要嵌套列表?我正在尝试按相同的数字对列表进行排序。如果我有一个输入([1,2,1,1,2]),我希望它作为[[1,1,1],[2,2]放在嵌套列表中