我有一个字母列表,希望能够像这样垂直显示:
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
答案 0 :(得分:9)
那是因为你是printing他们分开的。虽然你没有给我们足够的关于 实际上你想要打印它们的信息,但我可以推断出你想要第一列的前半部分和第二列的后半部分。
嗯,这不是那么容易,你需要提前考虑并意识到如果你计算列表的一半并保留它: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
,但如果两个迭代都不是',则填充默认值' t大小相同。
希望这有帮助!
答案 1 :(得分:3)
我只想提出另一种解决方案:
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
答案 2 :(得分: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
>>>
答案 3 :(得分:1)
如果目标是指定显示集合的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
答案 4 :(得分:0)
如果没有上下文,你很难提供答案。
如果您的数据需要成对,那么您可能应该创建一个结构不同的对象。一个简单的例子就是元组列表。
def main():
letters = [("a", "d"), ("b", "e"), ("c", "f")]
for pair in letters:
print("%s %s" % pair)
答案 5 :(得分:0)
对于一般解决方案,您可以按照以下方式执行操作:
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({2}为{2}),您可以提供填充值,并且不会截断奇数结束值。
如果要更改列,请更改行数:
izip_longest
打印:
for t in table(lets, 2):
print(*t)
当然,如果你有一个列表X项长,很容易计算出列和行之间的关系。
那么这是如何运作的?
根据定义,表格是一个矩阵。首先,创建一个a c e g i k m o
b d f h j l n p
长的矩阵:
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']]
从那里开始......
答案 6 :(得分:0)
一种简单的方法是:D=["A","B","C"]
打印('\ n'.join(D))
答案 7 :(得分:0)
>>> 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