将列表拆分为 3 个部分 [重复]
Posted
技术标签:
【中文标题】将列表拆分为 3 个部分 [重复]【英文标题】:split list to 3 parts [duplicate] 【发布时间】:2014-07-25 01:38:32 【问题描述】:我有对象列表:
l = [1, 2, 3, 4, 5, 6]
我找到了一些sn-p..http://herself.movielady.net/2008/07/16/split-list-to-columns-django-template-tag/
但他们是这样分裂的:
[1, 2] [3, 4] [5, 6]
我需要这样的拆分列表:
l1 = [1, 4]
l2 = [2, 5]
l3 = [3, 6]
请帮助建立正确的模板标签。
【问题讨论】:
在询问之前您尝试过什么?您是否尝试更改 sn-p 以获得您想要的? 在那个链接的问题中,许多答案会向您展示如何以您不希望的方式进行操作,但也有一些答案,例如 this one,它将为您提供所需的输出。 这个问题是关于拆分列表(尝试[[l[k] for k in range(i, len(l), N)] for i in range(N)]
)还是关于构建Django模板?
还有:Equally distribute a list in python
tobias_k 我的意思是构建 Django 模板..
【参考方案1】:
您可以使用列表推导将您的列表 l1
、l2
l3
收集到另一个列表中,然后对它们执行一些操作。例如:
l = [1, 2, 3, 4, 5, 6]
x = [[l[i]] + [l[i+3]] for i in range(len(l) - 3)]
for a in x:
print(a)
会得到你的
[1, 4]
[2, 5]
[3, 6]
如果您知道 x 包含三个列表,则可以将l1
、l2
、l3
与
l1, l2, l3 = x
当然,您也可以手动分配l1
、l2
、l3
。
l1 = [l[0]] + [l[3]]
...
【讨论】:
【参考方案2】:h = int(len(l)/2)
l1, l2, l3 = zip( l[:h], l[h:] )
l[:h]
是前半部分,l[h:]
是后半部分。见list slices。
>>> l[:h], l[h:]
([1, 2, 3], [4, 5, 6])
然后是zip函数,见zip。
>>> zip([1, 2, 3], [4, 5, 6])
[(1, 4), (2, 5), (3, 6)]
【讨论】:
它将原始列表一分为二并将它们压缩在一起。聪明,但缺乏解释。 对于示例问题,这是一个聪明的解决方案,但假设 OP 想要为这样的列表获取[1,4], [2,5], [3,6], [4,7]
,则 l == [1,2,3,4,5,6,7]
失败。此外,您的 l1, l2, l3
是元组(当然可以轻松更改为列表)。以上是关于将列表拆分为 3 个部分 [重复]的主要内容,如果未能解决你的问题,请参考以下文章