我正在学习python并且遇到了以下练习题。我正在尝试采用以下列表并将其打印在右对齐表中。
tableData= [['apples', 'oranges', 'cherries' , 'banana'],
['Alice' , 'Bob' , 'Carol', 'David'],
['dogs' , 'cats' , 'moose', 'goose']]
输出应该是这样的。
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
这是我的代码。
tableData= [['apples', 'oranges', 'cherries' , 'banana'],
['Alice' , 'Bob' , 'Carol', 'David'],
['dogs' , 'cats' , 'moose', 'goose']]
def printTable(lists):
colWidths = [0] * len(lists)
for x in range(0, len(lists[0])):
for y in range(0, len(lists)):
colWidths[y] = len(max(lists[y]))
fillChar= 0
fillChar = colWidths[x] - len(lists[y][x])
print(lists[y][x].rjust(fillChar, ' ' ) + ' ' , end = '' )
print(colWidths)
printTable(tableData)
我一直得到的输出如下。
apples Alice dogs
oranges Bob cats
cherries Carol moose
Traceback (most recent call last):
File "/Users/DakotaDickey/Documents/Python Projects /Examples/PrintTable.py", line 36, in <module>
printTable(tableData)
File "/Users/DakotaDickey/Documents/Python Projects /Examples/PrintTable.py", line 17, in printTable
fillChar = colWidths[x] - len(lists[y][x])
IndexError: list index out of range
感谢您的帮助
答案 0 :(得分:1)
这很简单:
for item1, item2, item3 in zip(*tableData):
print(item1.rjust(10) + item2.rjust(10) + item3.rjust(10))
这将为您单独获取物品并将其格式化为表格。您的整个程序已经浓缩为两行:)
这是它的工作原理:
zip(l1,l2)
有两个列表l1
和l2
,并返回单个列表,其中包含l1
和l2
的相应元素合并成一个元组。 zip(*tableData)
更进一步,将 tableData
解包到其各自的列表中。它相当于在这种情况下执行zip(tableData[0], tableData[1], tableData[2])
。rjust(width)
通过width
右对齐字符串。答案 1 :(得分:0)
为了跟进上一个答案,这有点笼统......
# Find the maximum length of the words ...
w = max([ max(map(len, m)) for m in tableData ]) + 1
# print the data ...
print '\n'.join([''.join(map(lambda x: str(x).rjust(w), m)) for m in zip(*tableData)])
答案 2 :(得分:0)
list = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
def swaplist(list):
result_list = []
for index in range(0, len(list[0])):
temp_list = []
for i in list:
temp_list.append(i[index])
result_list.append(temp_list)
return result_list
print swaplist(list)
只是打印
list = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
def swaplist(list):
for index in range(0, len(list[0])):
temp_list = []
for i in list:
temp_list.append(i[index])
print " ".join(temp_list)
swaplist(list)