具有特定位数的 Python 数字范围

时间:2021-06-18 21:29:39

标签: python list

我希望创建一个从 1 到 X(其中 X 大于 100)的数字列表。我知道 range 函数非常适合这个。我最终将使用这个列表来开发一个字符串列表,在每个数字的末尾附加一个字符串(即“.pdf”)。但是,当我这样做时,我想确保每个“数字”总共有三个数字。例如,我想要“005”而不是“5”,最终列表中的结果字符串将是“005.pdf”(即附加到字符串“.pdf”的数字“005”)。

我会简单地在每个字符串的开头添加“00”,但这不适用于两位整数(需要添加一个“0”)或三位数整数(不需要任何附加“0”)。

是否有一种有效的方法可以做到这一点,而无需手动迭代 1-9 和 10-99 以更正位数?

谢谢!

示例代码:

string=".pdf"
max_num=500
numrange = range(1,max_num)
final_list = [str(x) + string for x in numrange]

3 个答案:

答案 0 :(得分:1)

您可以使用 str.format 添加前导零。例如:

out = ["{:03d}.pdf".format(n) for n in range(200)]
print(out)

打印:

['000.pdf', '001.pdf', '002.pdf', '003.pdf', '004.pdf', '005.pdf', '006.pdf', '007.pdf', '008.pdf', '009.pdf', '010.pdf', '011.pdf', '012.pdf', '013.pdf', '014.pdf', '015.pdf', '016.pdf', '017.pdf', '018.pdf', '019.pdf', '020.pdf', '021.pdf', '022.pdf', '023.pdf', '024.pdf', '025.pdf', '026.pdf', '027.pdf', '028.pdf', '029.pdf', '030.pdf', '031.pdf', '032.pdf', '033.pdf', '034.pdf', '035.pdf', '036.pdf', '037.pdf', '038.pdf', '039.pdf', '040.pdf', '041.pdf', '042.pdf', '043.pdf', '044.pdf', '045.pdf', '046.pdf', '047.pdf', '048.pdf', '049.pdf', '050.pdf', '051.pdf', '052.pdf', '053.pdf', '054.pdf', '055.pdf', '056.pdf', '057.pdf', '058.pdf', '059.pdf', '060.pdf', '061.pdf', '062.pdf', '063.pdf', '064.pdf', '065.pdf', '066.pdf', '067.pdf', '068.pdf', '069.pdf', '070.pdf', '071.pdf', '072.pdf', '073.pdf', '074.pdf', '075.pdf', '076.pdf', '077.pdf', '078.pdf', '079.pdf', '080.pdf', '081.pdf', '082.pdf', '083.pdf', '084.pdf', '085.pdf', '086.pdf', '087.pdf', '088.pdf', '089.pdf', '090.pdf', '091.pdf', '092.pdf', '093.pdf', '094.pdf', '095.pdf', '096.pdf', '097.pdf', '098.pdf', '099.pdf', '100.pdf', '101.pdf', '102.pdf', '103.pdf', '104.pdf', '105.pdf', '106.pdf', '107.pdf', '108.pdf', '109.pdf', '110.pdf', '111.pdf', '112.pdf', '113.pdf', '114.pdf', '115.pdf', '116.pdf', '117.pdf', '118.pdf', '119.pdf', '120.pdf', '121.pdf', '122.pdf', '123.pdf', '124.pdf', '125.pdf', '126.pdf', '127.pdf', '128.pdf', '129.pdf', '130.pdf', '131.pdf', '132.pdf', '133.pdf', '134.pdf', '135.pdf', '136.pdf', '137.pdf', '138.pdf', '139.pdf', '140.pdf', '141.pdf', '142.pdf', '143.pdf', '144.pdf', '145.pdf', '146.pdf', '147.pdf', '148.pdf', '149.pdf', '150.pdf', '151.pdf', '152.pdf', '153.pdf', '154.pdf', '155.pdf', '156.pdf', '157.pdf', '158.pdf', '159.pdf', '160.pdf', '161.pdf', '162.pdf', '163.pdf', '164.pdf', '165.pdf', '166.pdf', '167.pdf', '168.pdf', '169.pdf', '170.pdf', '171.pdf', '172.pdf', '173.pdf', '174.pdf', '175.pdf', '176.pdf', '177.pdf', '178.pdf', '179.pdf', '180.pdf', '181.pdf', '182.pdf', '183.pdf', '184.pdf', '185.pdf', '186.pdf', '187.pdf', '188.pdf', '189.pdf', '190.pdf', '191.pdf', '192.pdf', '193.pdf', '194.pdf', '195.pdf', '196.pdf', '197.pdf', '198.pdf', '199.pdf']

答案 1 :(得分:1)

您需要对每个整数调用 format()。示例:

final_list = [format(x, '03') + string for x in numrange]

答案 2 :(得分:0)

在下面的代码中,我只是更改了 final_list 以在其中包含一些条件语句。它循环遍历从 1 到 499 的 numrange。仅占个位的数字将附加一个“00”字符串,因为 int(x)//10-其中 x 是从 1 到 9 的数字-求值为 0,这是 < 1。例如,您可以通过执行 print(1//10) 来检查这一点。然后,从 10 到 99 的数字通过第二个条件("0" + str(x) + string if int(x)//10 >= 1 and int(x)//10 < 10)。如果对 >= 100 的整数 x 执行 int(x)//10,则表达式将给出 int >= 10,这使得第三个条件 (str(x) + string) 为真。最后,// 是 Python 中的除法运算符,结果为未舍入的整数。

    string=".pdf"
    max_num = 500
    numrange = range(1,max_num)
    final_list = ["00" + str(x) + string if int(x)//10 < 1 else "0" + str(x) + 
    string if int(x)//10 >= 1 and int(x)//10 < 10 else str(x) + string for x in numrange]
    print(final_list)
相关问题