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'),这只适用于偶数个字符(这是原始示例)最后,您将删除最后一个字符,以便输出与您测试的一组对相同。我认为问题是,给定一个简单的文本列表,如何以列对打印。