python - 如何使用 for 循环在单独的列中打印列表中的列表?
问题描述
问题来自 ATBS 的第 6 章。它是创建一个传递列表列表的函数,然后打印每个列表,但要对齐,以便每列整齐且齐平,而不管列表中字符串的长度如何。
我创建了一个空列表,其元素数量与每个嵌入式列表相同(假设所有长度都相同),并在每个列表中找到了最大字符串长度,并将此数字添加到空列表中。然后调用以打印由最大字符串长度证明的每个列表。
table = [['Tom','Dick','Harry','John'],
['Apples','Oranges','Strawberries','Grapes'],
['Brocolli', 'Asparagus', 'Carrots', 'Potatoes']]
def printTable(tableData):
colWidths = [0] * len(tableData)
for i in range(len(tableData)):
colWidths[i] = max(len(j) for j in tableData[i])
for i in range(len(tableData)):
for j in tableData[i]:
print(j.rjust(colWidths[i]))
printTable(table)
这将打印以下内容
Tom
Dick
Harry
John
Apples
Oranges
Strawberries
Grapes
Brocolli
Asparagus
Carrots
Potatoes
但我希望它在三个单独的列中,而不是只有一个。我知道这可以简单地用 zip 完成,但我还没有涉及到。我想在覆盖新内容之前了解如何使用 for 循环来完成工作,因为我认为这不会帮助我正确学习基础知识。
解决方案
尝试这个:
table = [['Tom','Dick','Harry','John'],
['Apples','Oranges','Strawberries','Grapes'],
['Brocolli', 'Asparagus', 'Carrots', 'Potatoes']]
def printTable(tableData):
colWidths = [0] * len(tableData)
for i in range(len(tableData)):
colWidths[i] = max(len(j) for j in tableData[i])
for i in range(len(tableData)):
for j in tableData[i]:
print(j.rjust(sum(colWidths[:i+1])))
printTable(table)
我所做的只是改变rjust
以证明不仅为当前列,而且为所有以前的列。
好在你已经把所有宽度都放在了一个列表中:)
推荐阅读
- scala - Spark UDF 到自定义排序结构数组
- python - 循环的输出附加到 csv 但内容不会随着迭代而改变
- excel - 当按下命令按钮时,如何修复我的数据库脚本不更新以将其他数据添加到下一行?
- flutter - 不同尺寸设备中的自适应布局
- pine-script - 如何有条件地删除 Pine Script 中的行
- python - 如何在for循环中更改多边形边缘的颜色
- jquery - 动画完成后删除类
- python - 尝试使用 Flask-SQLAlchemy 连接到 MySQL 数据库时出现 sqlalchemy.exc.OperationalError
- javascript - 更改 React 中的文本字段时更新状态的延迟
- sockets - UDP 套接字 - 禁用传入广播