我是编码和本网站的新手,所以请耐心等待。我正在努力完成#34;使用Python自动化无聊的东西,"这是章节复习问题之一。我不太关心解决.rjust
方法的奇怪行为的答案。该项目的目标是对几个字符串列表进行右对齐。为了测试我的过程,我编写了一个函数来处理一个列表。
我的目标:
apples
oranges
cherries
bananas
以下是代码:
tableData = [['apples', 'oranges', 'cherries', 'bananas'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
def test():
for fruit in tableData[0]:
longest = len(tableData[0][0])
longestlen = len(fruit)
if longest < len(fruit):
longest = fruit
longestlen = len(fruit)
print(fruit.rjust(longestlen))
test()
我试图通过引用每个列表中最长的字符串来使.rjust
动态,但是使用"fruit.rjust(longestlen)"
打印列表而不是证明它:
apples
oranges
cherries
bananas
如果我将"longestlen"
与int
交换为8
,那就可以了。为什么我不能使用变量来定义理由,或者我在做其他错误的事情?我还没有找到任何关于此的文档。
我意识到我在代码中添加了额外的变量。它现在读成:
def test():
for fruit in tableData[0]:
longest = len(tableData[0][0])
if longest < len(fruit):
longest = len(fruit)
print(fruit.rjust(longest))
test()
这会输出相同的,不合理的输出,但更清晰。 我意识到这与我的.rjust()=而不是&gt;的值有同样的问题。 len(fruit),导致.rjust方法出现问题。但是,如果我这样做:
print(fruit.rjust(longest + 1))
。如果它有更大的争议,我应该正常工作,对吗?但它仍然无法证明这一权利。
答案 0 :(得分:1)
import datetime
datetime.datetime.strptime('<date string>', '%d%m%Y').date()
与你试图证明的字符串长度具有相同的值,因此,你不会得到任何理由:
rjust
但:
print("foo".rjust(3))
foo
所以,为了让这个工作,首先需要获取最大长度,然后证明:
print("foo".rjust(4))
foo
此处def test():
l = len(max(tableData[0], key=len))
print(l)
for fruit in tableData[0]:
print(fruit.rjust(l))
test()
根据l = len(max(tableData[0], key=len))
(设置为tableData[0]
)获取key
中的最大值,然后获取len
的{{1}}该字符串(len
将被返回,因此将使用cherries
。
现在正确打印出来:
len(cherries) == 8
如果您无法使用 apples
oranges
cherries
bananas
,则必须迭代max
一次以找到最大值,然后再次循环以打印出合理的值。
首先,通过将初始计数器设置为tableData[0]
并在找到更长的单词时递增它来完成最大值:
0
此循环结束后,longest = 0
for fruit in tableData[0]:
if longest < len(fruit):
longest = len(fruit)
将具有值longest
。现在,只需再次遍历列表并进行格式化,即:
8
将所有内容放在for fruit in tableData[0]:
print(fruit.rjust(longest))
函数中,以您需要的方式打印出来:
test