将列表拆分为 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】:

您可以使用列表推导将您的列表 l1l2 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 包含三个列表,则可以将l1l2l3

l1, l2, l3 = x

当然,您也可以手动分配l1l2l3

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 个部分 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将包含列表的列拆分为熊猫中的不同行[重复]

熊猫:将列中的列表拆分为多行[重复]

将嵌套列表拆分为两个列表[重复]

将熊猫数据框列列表值拆分为重复行[重复]

在pySpark中将RDD拆分为n个部分

将列表列表拆分为熊猫数据框[重复]