我无法确定如何对列表中的每四个值进行分组,然后将其作为嵌套列表添加到另一个列表中。
假设我有以下列表:
mylist = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7',
'item8', 'item9', 'item10', 'item11', 'item12', 'item13', 'item14',
'item15', 'item16', 'item17', 'item18', 'item19', 'item12']
现在我想将此列表中的每四个项目分组到一个嵌套列表中,但嵌套列表的长度不能超过最大长度为四个。
即
mylist = [['item1', 'item2', 'item3', 'item4'], ['item5', 'item6', 'item7',
'item8'], ['item9', 'item10', 'item11', 'item12'], ['item13', 'item14',
'item15', 'item16'], ['item17', 'item18', 'item19', 'item12']]
如何在数据值可能发生变化的函数中实现这样的结果?在这个函数中,我在我的参数中指定最终结果中的嵌套列表的数量可以通过可选值来更改。然后我指定每个嵌套列表不能长于第三个参数中传递的特定长度,该长度也是可选的。
参数:
如果将mylist
传递给values
参数,我怎样才能实现上述结果?以下是我目前的代码。
def group_items(values, num_of_lists=5, max_list_num=4):
grouped_lists = [[] for _ in xrange(num_of_lists)]
counter = 0
myvals = []
for v in values:
myvals.append(v)
try:
for item in grouped_lists:
if len(item) < max_list_num:
mygroup = myvals[0:max_list_num]
if mygroup not in grouped_lists:
grouped_lists[counter].extend(mygroup)
counter += 1
except IndexError: pass
return grouped_lists
print group_items(mylist, num_of_lists=5, max_list_num=4)
以上代码将此返回给我而不是所需的结果:
>>> [['item1', 'item2', 'item3', 'item4'], [], [], [], []]
(EDIT W / ANSWER):
谢谢Rakesh的快速回答。由于此函数只是我整个程序的一个示例,它将使用数据执行其他任务,因此我需要将代码保留在内部。我略微修改了他的代码并将其添加到我的函数中(虽然我推荐他的确切方法,因为它的代码行数较少):
def group_items(values, num_of_lists=5, max_list_num=4):
grouped_lists = [[] for _ in xrange(num_of_lists)]
counter = 0
myvals = []
for v in values:
myvals.append(v)
try:
for item in range(0, len(myvals), max_list_num):
nested_vals = myvals[item:item+max_list_num]
grouped_lists[counter].extend(nested_vals)
counter += 1
except IndexError: pass
return grouped_lists
答案 0 :(得分:2)
使用列表理解。
<强>实施例强>
mylist = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7',
'item8', 'item9', 'item10', 'item11', 'item12', 'item13', 'item14',
'item15', 'item16', 'item17', 'item18', 'item19', 'item12']
max_list_num = 4
print([mylist[i:i+max_list_num] for i in range(0, len(mylist), max_list_num)])
<强>输出:强>
[['item1', 'item2', 'item3', 'item4'], ['item5', 'item6', 'item7', 'item8'], ['item9', 'item10', 'item11', 'item12'], ['item13', 'item14', 'item15', 'item16'], ['item17', 'item18', 'item19', 'item12']]