在Python中拆分一个列表并将余数均匀地添加到其他子列表中

2024-04-24 19:21:04 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个列表:

['apples','oranges','bananas','pineapples','grapes','mushrooms','milk']

如何将其拆分为n项的列表(在我的示例中是每个子列表3项),并将剩余的项均匀地添加到尽可能多的子列表中?在

我的第一个解决方案是将每个组分成我想要的数量,取最后一个列表,然后根据其大小将其添加到每个第一个组中,但我将硬编码这些值。。在

我甚至都不知道如何从逻辑上思考这个问题。在

编辑:

结果:

^{pr2}$

Tags: 编辑示例编码列表数量逻辑解决方案milk
3条回答

你可以试试这个

a = ['apples', 'oranges', 'bananas', 'pineapples', 'grapes', 'mushrooms', 'milk']
n = 3 # No of groups
[a[i::3] for i in range(n)]

输出

^{pr2}$

像这样:

li=['apples','oranges','bananas','pineapples','grapes','mushrooms','milk']

n=3
for chunk in [li[i:i+n] for i in range(0, len(li), n)]:
    print chunk

印刷品:

^{pr2}$

或者你可以沿着这些思路做些什么:

def partition(lst, n):
    ''' divide lst in n nearly even size chunks '''
    n=min(len(lst),n)
    q, r = divmod(len(lst), n)
    indices = [q*i + min(i, r) for i in xrange(n+1)]
    return [lst[indices[i]:indices[i+1]] for i in xrange(n)]    

for n in range(1,5): 
    print n, partition(li, len(li)/n+1)   

印刷品:

1 [['apples'], ['oranges'], ['bananas'], ['pineapples'], ['grapes'], ['mushrooms'], ['milk']]
2 [['apples', 'oranges'], ['bananas', 'pineapples'], ['grapes', 'mushrooms'], ['milk']]
3 [['apples', 'oranges', 'bananas'], ['pineapples', 'grapes'], ['mushrooms', 'milk']]
4 [['apples', 'oranges', 'bananas', 'pineapples'], ['grapes', 'mushrooms', 'milk']]
import math

lst = ['apples','oranges','bananas','pineapples','grapes','mushrooms','milk']
new_lst = []
sets = 2

if len(lst)/sets > 0 :
    iterate = math.floor(len(lst)/sets)
else:
    iterate = math.ceil(len(lst)/sets)

for x in range(iterate):
    new_lst.append([])
    for y in range(sets):
        new_lst[-1].append(lst.pop(0))

for x in range(len(lst)):
    new_lst[0].append(lst.pop(0))


print(new_lst)

相关问题 更多 >