如何垂直显示列表?
我有一串字母,想把它们竖着显示,像这样:
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
9 个回答
1
如果你的目标是指定要显示集合的列数,这里是我的代码
# 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)
示例
nbcol == 1
ab
R
uio
b
4578
h
yu
mlp
AZY12
78
nbcol == 2
ab h
R yu
uio mlp
b AZY12
4578 78
nbcol == 3
ab 4578 AZY12
R h 78
uio yu
b mlp
nbcol == 4
ab b yu 78
R 4578 mlp
uio h AZY12
nbcol == 5
ab uio 4578 yu AZY12
R b h mlp 78
nbcol == 6
I can't do it
nbcol == 7
I can't do it
nbcol == 8
I can't do it
===============================
nbcol == 1
a
b
c
d
e
f
nbcol == 2
a d
b e
c f
nbcol == 3
a c e
b d f
nbcol == 4
I can't do it
nbcol == 5
I can't do it
nbcol == 6
a b c d e f
nbcol == 7
I can't do it
nbcol == 8
I can't do it
===============================
nbcol == 1
a
b
c
d
e
f
g
h
i
j
k
nbcol == 2
a g
b h
c i
d j
e k
f
nbcol == 3
a e i
b f j
c g k
d h
nbcol == 4
a d g j
b e h k
c f i
nbcol == 5
I can't do it
nbcol == 6
a c e g i k
b d f h j
nbcol == 7
I can't do it
nbcol == 8
I can't do it
1
回答:Peter Goldsborough 有个问题
这个字母数组怎么样呢
>>> 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
我为它添加了一个条件
>>> for n,i in enumerate(letters[:3]):
if n + 3 < len(letters):
print(i,letters[n+3])
else:
print(i)
a d
b e
c
Paulo Bu 的回答也有同样的问题。
这是我认为更简单、更通用的解决方案
>>> import math
>>> def main():
letters = ["a", "b", "c", "d", "e", "f"]
rows = 3
columns = int(math.ceil(len(letters) / rows))
for i in range(min(rows, len(letters))):
for j in range(columns):
next_column_i = i + rows * j
if next_column_i < len(letters):
print(letters[next_column_i], end = ' ')
print()
>>> main()
a d
b e
c f
>>>
我可以把行数改成 2,如果需要的话,这样就很容易得到
>>> main()
a c e
b d f
>>>
4
我再提供一个解决方案:
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
6
一个简单的方法是:
D=["A","B","C"] print('\n'.join(D))
这里的意思是,首先我们创建了一个叫做D的列表,里面有三个字母"A"、"B"和"C"。然后,使用`print`这个命令把它们打印出来。`'\n'.join(D)`的作用是把列表里的内容用换行符连接起来,这样每个字母就会在新的一行显示。
9
这是因为你把它们打印在了不同的行上。虽然你没有告诉我们你具体想怎么打印,但我可以推测你想把前半部分放在第一列,后半部分放在第二列。
其实这并不简单,你需要提前想一下。如果你先计算出列表的中间位置并保存它:h=len(letters)//2
,然后用一个变量i
遍历列表的前半部分,就可以在同一行打印letters[i]
和letters[h+i]
,对吧?大概是这样的:
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
函数把列表的两个半部分组合成元组。
为了完整起见,如果将来你的列表长度不是偶数,你可以使用itertools.zip_longest
,这个函数的工作方式和zip
差不多,但如果两个列表的长度不一样,它会用默认值填充。
希望这对你有帮助!