[英]How to display a list vertically?
我有一個字母列表,希望能夠像這樣垂直顯示它們:
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
那是因為您在單獨的行中打印它們。 盡管您沒有給我們足夠的信息來說明您實際上想要如何打印它們,但我可以推斷出您想要第一列的前半部分和第二列的后半部分。
嗯,這不是那么容易,您需要提前考慮一下並意識到如果您計算列表的一半並保留它: 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
一樣工作,但如果兩個可迭代的大小不同,則填充默認值。
希望這可以幫助!
我只會提出另一個解決方案:
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
回答 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
>>>
如果目標是指定顯示集合的 COLUMNS 數,這是我的代碼
# 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
如果沒有你正在做的事情的背景,就很難提供答案。
如果您的數據需要成對出現,那么您或許應該創建一個不同結構的對象。 一個簡單的例子是元組列表。
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
由於我們使用的是zip_longest (Python 2 的izip_longest
),您可以提供一個填充值並且奇數結束值不會被截斷。
如果要更改列,請更改行數:
for t in table(lets, 2):
print(*t)
印刷:
a c e g i k m o
b d f h j l n p
當然,如果您有一個長 X 項的列表,那么計算 cols 和 rows 之間的關系很容易。
那么這是如何工作的呢?
根據定義,表是一個矩陣。 因此,首先創建一個矩陣就是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)
然后從那里走...
一個簡單的方法是: D=["A","B","C"]
print('\\n'.join(D))
>>> letters = ["a", "b", "c", "d", "e", "f", "g"]
>>> odd_even = zip(letters[::2], letters[1::2] + len(letters) % 2 * [""])
>>> pairs = [" ".join([odd, even]) for odd, even in odd_even]
a b
c d
e f
g
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.