我目前正在使用Python自动化无聊的东西,我正在处理项目,我必须以更改的顺序显示tableData中的数据,然后根据最长元素的长度对每个元素进行调整在每个列表中,它将显示如下内容:
jabłka Alicja psy
pomarańcze Bob koty
依旧......
我知道我必须得到每个嵌套列表的第一个元素,然后是第二个等等,但我真的很难接受这个,我希望你可以帮助我。
PS不要担心列表项中的奇怪字母,它是我的母语:)
tableData = [
['jabłka', 'pomarańcze', 'wiśnie', 'banany'],
['Alicja', 'Bob', 'Karol', 'Dawid'],
['psy', 'koty', 'łosie', 'gęsi']
]
def printTable():
colWidth = [0] * len(tableData)
for i in range(len(tableData)):
for j in range(len(tableData[i])):
if colWidth[i] < len(tableData[i][j]):
colWidth[i] = len(tableData[i][j])
printTable()
答案 0 :(得分:3)
要迭代嵌套列表的“列”,请使用Python惯用法zip(*tableData)
:
for col in zip(*tableData):
print(col)
# ('jabłka', 'Alicja', 'psy')
# ('pomarańcze', 'Bob', 'koty')
# ('wiśnie', 'Karol', 'łosie')
# ('banany', 'Dawid', 'gęsi')
通过这种方式,您可以获得每列最长条目的长度:
max_lens = [len(max(col, key=len)) for col in zip(*tableData)]
print(max_lens)
# [6, 10, 6, 6]
打印实际右对齐的文本只是练习将正确的宽度应用于正确的元素并使用str.rjust
:
for row in tableData:
print('|'.join(item.rjust(width) for item, width in zip(row, max_lens)))
# jabłka|pomarańcze|wiśnie|banany
# Alicja| Bob| Karol| Dawid
# psy| koty| łosie| gęsi
答案 1 :(得分:1)
def print_table(arr):
for col in zip(*arr):
print(' '.join(col))
答案 2 :(得分:0)
tableData = [
['jabłka', 'pomarańcze', 'wiśnie', 'banany'],
['Alicja', 'Bob', 'Karol', 'Dawid'],
['psy', 'koty', 'łosie', 'gęsi']
]
outputTable = []
for table in tableData:
tempTable = [[len(ele),ele] for ele in table]
tempTable = sorted(tempTable)
tempTable = [ele[1] for ele in tempTable]
outputTable.append(tempTable)
print(outputTable)
这将根据长度对内部元素进行排序。假设升序。
答案 3 :(得分:0)
另一个选项,不如使用zip
的选项,是转置表格,然后分别打印每个列表:
def printTable():
# Transpose table
result = [[elem[i] for elem in tableData] for i in range(len(tableData[0]))]
#Print results
for r in result:
print(" ".join(r))
printTable()