Python 如何垂直显示列表?

Python 如何垂直显示列表?,python,string,list,python-3.x,Python,String,List,Python 3.x,我有一个字母列表,希望能够垂直显示它们,如下所示: a d b e c f def main(): letters = ["a", "b", "c", "d","e", "f"] for i in letters: print(i) 此代码仅显示如下所示: a b c d e def main(): letters = ["a", "b", "c", "d","e", "f"] h = len(letters)//2 # integer div

我有一个字母列表,希望能够垂直显示它们,如下所示:

a d
b e
c f

def main():
    letters = ["a", "b", "c", "d","e", "f"]
    for i in letters:
       print(i)
此代码仅显示如下所示:

a
b
c
d
e
def main():
    letters = ["a", "b", "c", "d","e", "f"]
    h = len(letters)//2 # integer division in Python 3
    for i in range(h):
       print(letters[i], letters[h+i])
那是因为你把他们分在不同的队伍里。虽然你没有给我们足够的信息来说明你到底想如何打印它们,但我可以推断,你想要的是第一列的前半部分,第二列的后半部分

好吧,这并不是那么容易,你需要提前想一想,并意识到如果你计算列表的一半并保留它:
h=len(letters)//2
你可以用变量
i
迭代列表的前半部分,并打印在同一行
letters[i]
letters[h+i]
正确吗?大概是这样的:

a
b
c
d
e
def main():
    letters = ["a", "b", "c", "d","e", "f"]
    h = len(letters)//2 # integer division in Python 3
    for i in range(h):
       print(letters[i], letters[h+i])
您可以很容易地将其推广到没有对长度的列表,但这实际上取决于您在这种情况下要做什么

也就是说,通过使用Python,您可以更进一步:)。请看以下代码:

def main():
    letters = ["a", "b", "c", "d","e", "f"]
    for s1,s2 in zip(letters[:len(letters)//2], letters[len(letters)//2:]): #len(letters)/2 will work with every paired length list
       print(s1,s2)
这将在Python 3中输出以下内容:

a d
b e
c f
我刚才做的是用函数对列表的两部分进行分组,形成元组

为了完整性起见,如果有一天您的列表没有一对长度,您可以使用类似于
zip
但在两个iterables大小不相同时填充默认值的


希望这有帮助

我将引入另一个解决方案:

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

for n,i in enumerate(letters[:3]):
    print(i,letters[n+3])
还输出:

a d
b e
c f

回答彼得·戈德斯伯勒的问题

这个字母数组怎么样

>>> letters = ["a", "b", "c", "d","e"]
>>> for n,i in enumerate(letters[:3]):
    print(i,letters[n+3])


a d
b e
Traceback (most recent call last):
  File "<pyshell#187>", line 2, in <module>
    print(i,letters[n+3])
IndexError: list index out of range

没有你所做的事情的背景,很难给出答案

如果您的数据需要成对,那么也许您应该创建一个不同结构的对象。一个简单的例子是元组列表

def main():
    letters = [("a", "d"), ("b", "e"), ("c", "f")]
    for pair in letters:
       print("%s %s" % pair)

对于一般解决方案,您可以按照以下思路执行操作:

from itertools import zip_longest

lets = list('abcdefghijklmnop')

def table(it, rows):
    return zip_longest(*[it[i:i+rows] for i in range(0, len(it), rows)], 
                            fillvalue=' ')

for t in table(lets, 6):
    print(*t) 
印刷品:

a g m
b h n
c i o
d j p
e k 
f l 
a c e g i k m o
b d f h j l n p
因为我们正在使用(
izip_longest
用于Python 2),所以您可以提供一个fillvalue,并且奇数结束值不会被截断

如果要更改列,请更改行数:

for t in table(lets, 2):
    print(*t)  
印刷品:

a g m
b h n
c i o
d j p
e k 
f l 
a c e g i k m o
b d f h j l n p
当然,如果列表中有X个项目,那么计算col和rows之间的关系很容易

那么这是如何工作的呢

根据定义,表是一个矩阵。首先,创建一个
长的矩阵:

>>> lets
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']
>>> rows=6
>>> [lets[i:i+rows] for i in range(0, len(lets), rows)]
[['a', 'b', 'c', 'd', 'e', 'f'], ['g', 'h', 'i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p']]
然后反转该矩阵:

>>> for t in zip_longest(*[lets[i:i+rows] for i in range(0, len(lets), rows)]):
...     print(t)
... 
('a', 'g', 'm')
('b', 'h', 'n')
('c', 'i', 'o')
('d', 'j', 'p')
('e', 'k', None)
('f', 'l', None)

从这里开始…

如果目标是指定要在其中显示集合的列数,下面是我的代码

# Python 3

from math import ceil

def pt(x, nbcol):
    print ('nbcol ==',nbcol)
    y = int(ceil(len(x)/float(nbcol)))
    wcol = len(x)//y
    if wcol==nbcol or (wcol+1==nbcol and 0 < len(x) - (wcol*y) <= y):
        print ('\n'.join('\t'.join(str(el) for el in x[i::y])
                         for i in range(y)) , '\n' )
    else:
        print ("I can't do it\n")


li = ['ab','R','uio','b',4578,'h','yu','mlp','AZY12','78']
for nbcol in range(1,9):
    pt(li,nbcol)
print ('===============================')
for nbcol in range(1,9):
    pt("abcdef",nbcol)
print ('===============================')
for nbcol in range(1,9):
    pt('abcdefghijk',nbcol)
一个简单的方法是:
D=[“A”、“B”、“C”]
打印('\n'.连接(D))

>>字母=[“a”、“b”、“c”、“D”、“e”、“f”、“g”]
>>>奇偶=zip(字母[::2],字母[1::2]+len(字母)%2*[“”)
>>>pairs=[“”。对于奇数,偶数,在奇偶中连接([奇数,偶数])
a b
c d
EF
G

虽然这是正确的,但为了清晰起见,我建议您添加输出。@sabbahillel输出就在那里。我遗漏了什么吗?很好的解决方案,但是如果他决定打印3个字母,那么要更改代码就比@ChristianOh@Christian删除代码要困难一些,因为如果你再添加一个字符('g'),这只适用于偶数个字符(这是原始示例)最后,您将删除最后一个字符,以便输出与您测试的一组对相同。我认为问题是,给定一个简单的文本列表,如何以列对打印。