如何拆分每个子列表中具有固定数量项目的列表

How to split a list with a fixed number of items in each sublist

我有一个列表说:

my_list=[1,2,3,1,5,6,7,5,9,9]

我想创建子列表,每个子列表包含 4 个 items.The 子列表的数量将取决于原始列表的长度 (my_list),但每个子列表应该有最大值4 项。 即

a1=[1,2,3,1]
a2=[5,6,7,5]
a3=[9,9]

所以我这样做了:

n=4
final = [my_list[i * n:(i + 1) * n] for i in range((len(my_list) + n - 1) // n )] 
print (final)

现在我想检查是否有多少元素在子列表中重复并将其附加到新列表,比如 q.For 我这样做了: 我尝试使用:

q=[]    
for i in range(len(final)):
                  for a in final[i]:
                      k=final[i].count(a)
                      q.append(k)
    print(q)  

但这给了我一个很长的列表,如下所示:

[2, 1, 1, 2, 2, 1, 1, 2, 2, 2]

然而我想要的是,一个数字在子列表中重复的总次数,像这样:

l=[3] #for the whole my_list

l=[[1],[1],[1]] #specifying for every sub-list
              

这将为您提供每个原始子列表的计数子列表

q=[]    
for i in range(len(final)):
    sub_list_q = []
    for a in final[i]:
        k=final[i].count(a)
        for _ in range(k): # Remove duplicates
            final[i].remove(a)
        if k-1 > 0:
            sub_list_q.append(k-1) # Only append if it's a duplicate
    q.append(sub_list_q)
print(q)

我认为您可以通过这种方式获得重复元素的数量 - 比较子列表和从中创建的集合:

my_list=[1,2,3,1,5,6,7,5,9,9]
n=4
final = [my_list[i * n:(i + 1) * n] for i in range((len(my_list) + n - 1) // n )] 
print (final)

total=0
for el in final:
    s=list(set(el))
    total+=len(el)-len(s)

print(total)

首先,您可以以更简洁明了的方式定义您的 final 列表理解(imo):

my_list=[1,2,3,1,5,6,7,5,9,9]

final = [my_list[n: n+4] for n in range(0, len(my_list), 4)]

然后,要打印出重复的个数,其实可以对原始列表进行操作,这样会比处理二维数组更简单:

total = len(my_list) - len(set(my_list))