如何将列表拆分为两个列?

时间:2017-10-04 18:05:12

标签: python list multiple-columns

比如说我有这个清单:

list = ["a", "b", "c", "d", "e", "f"]

为了将它打印到shell上我需要做什么:

a    d
b    e
c    f

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这是一个非常容易理解的有趣解决方案,无论列表元素的数量是多少(奇数或偶数),它都有额外的好处。

基本上,这会将列表除以2以确定中点。然后开始遍历列表,打印第一列中点下方的每个元素,并通过将中点添加回打印的第一个元素的索引来打印中点上方的任何元素。

例如:在下面的列表l中,中间点为3。因此,我们迭代l并在第一列中打印索引元素0,并在第二列中打印索引元素0+3。等等...... 11+3等等。

import math

l = ['a', 'b', 'c', 'd', 'e', 'f']
l2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

# set our break point to create the columns
bp = math.floor(len(l)/2) # math.floor, incase the list has an odd number of elements

for i,v in enumerate(l):
    # break the loop if we've iterated over half the list so we don't keep printing
    if i > bp:
        break
    # Conditions:
    # 1. Only print v (currently iterated element) if the index is less-than or equal to the break point
    # 2. Only print the second element if its index is found in the list
    print(v if i <= bp-1 else ' ', l[i+bp] if len(l)-1 >= i+bp else ' ')

只需交换ll2列表名称即可测试不同的列表。对于l,这将输出所需的结果:

a   d
b   e
c   f

并且l2将输出以下结果:

a   d
b   e
c   f
    g

希望这有帮助!

答案 1 :(得分:0)

快速回答:

list = ["a", "b", "c", "d", "e", "f"]
newList = []
secList = []    
if len(list)%1 == 0: ###will only work is list has even number of elements
    for i in range(len(list)):
        if i < len(list)/2:
            newList.append(list[i])
        else:
            secList.append(list[i])

for i,j in zip(newList, secList):
    print i,j