今天看个代码,给我整不会了。

试了半天,终于大概知道是啥意思了。浅记录一下。这是个挺基础的知识点,主要是记录思考过程

原始问题是:

如何打印一个包含时间递增的列表:如:

['00:00', '00:01', '00:02', '00:03', '00:04', '00:05'.................'23:55', '23:56', '23:57', '23:58', '23:59']

有人给出了答案:

re_list = []
# 分钟间隔
time_step = 1
for i in range(0, 24, 1):
    for j in range(0, 60, time_step):
        time_str = f'{i:0>2}:{j:0>2}' # 0>2是啥意思?
        re_list.append(time_str)
        print(time_str)
print(re_list)

其中这句话没看懂

python怎么左补20个0 python补齐位数_python


f-string 这个玩意儿我倒是知道,也经常用。但是这个0>2就不明白了,也不像是三元表达式啊?

先去百度搜一搜看看。好像没找到(关键是不知道该搜什么好,关键词搜不对就挺难找到正确答案的)

那就自己试试吧。

a =1 # 先定义一个变量
print(f'{a:0>2}:{a:0>2}') # 再按上边的格式打印一下看看效果

python怎么左补20个0 python补齐位数_补全_02

打出来的效果是01:01


猜想步骤:

1、先看看哪几个能改,改一下运行看看结果再说。

f’{a:0>2}:{a:0>2}'中
a、0、>、2这四个都能改,随便改改试试:

把0换成x,可以打印。如下:

python怎么左补20个0 python补齐位数_python怎么左补20个0_03

把0换成6,也可以打印,如下

python怎么左补20个0 python补齐位数_元组_04


那么,盲猜一下,好像跟补齐相关。

如果是补齐,那么参与补齐的字符应该是哪个?大概率是0,因为01:01、x1:x1、61:61中,并没有出现源代码里边的2的字样。

以上,说明这东西大概是补齐对齐的意思,并且源码里的0,应该是用于补齐的字符。


2、如果用于补齐的字符是0,那2是什么意思?—继续试验。把2改成3看看效果

如下:

打印输出内容,居然变成了001,那这个2大概率就是位数。也就是控制补全到多少位的那个东西。

python怎么左补20个0 python补齐位数_元组_05

为了证明猜想,再试一组:把2换成字符串。

如下,报错了。

因为对于补全,我们一般都会说:最少10位,不足的用0补全。

而不会说:最少a位,不足的用0补全。

python怎么左补20个0 python补齐位数_字符串_06


以上,说明猜想基本2正确,2应该就是那个用于控制补全到多少位的那个东西。


3、那这个大于号(>)是什么意思?—继续试验。

大于号的作用就呼之欲出了,大概率是控制左补全还是右补全的

如下:

把大括号改成小于号,打印输出就变成了10000

python怎么左补20个0 python补齐位数_补全_07

贴个对比图:

python怎么左补20个0 python补齐位数_字符串_08

以上,说明猜想基本3正确,>应该就是控制补全方向的。


综上推断,语法应该是:

f"{object:str:int}" # 官方文档太多了,没找到。等找到了再补上官网的语法

object:要被补全的内容。可以是数字、字符串(其他的列表、元组、集合、字典都不行)
str:用什么来补全。可以是数字、字符串(其他的列表、元组、集合、字典都不行)
int:补全多少位(注意,这个是加上原始内容之后补全的位数,是object+str合起来的位数)。只能是整数,不能是小数(这里有点好玩,我试了下负数,居然结果一样)

python怎么左补20个0 python补齐位数_补全_09

多说一句:居然还有^这个符号,代表居中。

python怎么左补20个0 python补齐位数_补全_10

python怎么左补20个0 python补齐位数_元组_11

参考资料:
Python格式化字符串f-string概览