【问题标题】:Write out strings using variables python [closed]使用变量python写出字符串[关闭]
【发布时间】:2020-08-21 23:16:11
【问题描述】:

我正在尝试将 2010-11、2011-12 等形式的年份范围写为字符串。我现在使用的代码是:

date = ['200' + str(x) + '-' + str(x+1) for x in range(1,9)] + ['20' + str(x) + '-' + str(x+1) for x in range(10,16)]

哪个输出

['2001-2', '2002-3', '2003-4', '2004-5', '2005-6', '2006-7', '2007-8', '2008-9', '2010-11', '2011-12', '2012-13', '2013-14', '2014-15', '2015-16']

如何在一行代码中编写此代码,而不是分成年份为 10 的两种情况?

编辑 7/5/20:已更改措辞以解决基于意见的问题。

【问题讨论】:

    标签: python


    【解决方案1】:

    年份是数字;只需正常添加它们,而不是尝试将整数加法重新实现为字符串操作。 :) 此外,对于这类事情,f-strings 比转换为字符串和连接要简洁得多!

    >>> [f"{2000+y}-{y+1:02d}" for y in range(1, 20)]
    ['2001-02', '2002-03', '2003-04', '2004-05', '2005-06', '2006-07', '2007-08', '2008-09', '2009-10', '2010-11', '2011-12', '2012-13', '2013-14', '2014-15', '2015-16', '2016-17', '2017-18', '2018-19', '2019-20']
    

    【讨论】:

    • 谢谢@Samwise。我如何在没有十位单位的年份前面得到一个“0”(即“2001-02”而不是“2001-2”)?
    • 只需使用{y+1:02d} 表示您希望该号码用两位数字补零。将其编辑为答案。 :)
    【解决方案2】:

    使用 f-strings 更具可读性:

    [f'200{x}-{x+1}' for x in range(1,9)]

    您可以了解更多关于他们的信息here

    【讨论】:

      【解决方案3】:

      你可以试试 pandas.date_range https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.date_range.html

      您也可以查看这个论坛,我认为这可能是您正在寻找的。 datetime to string with series in python pandas

      【讨论】:

        【解决方案4】:

        可以使用python string formatting指定固定长度:

        ['2{:003d}-{:02d}'.format(x, x+1) for x in range(0,20)]
        

        输出

        ['2000-01', '2001-02', '2002-03', '2003-04', '2004-05', '2005-06', '2006-07', '2007-08', '2008-09', '2009-10', '2010-11', '2011-12', '2012-13', '2013-14', '2014-15', '2015-16', '2016-17', '2017-18', '2018-19', '2019-20']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-29
          • 2021-11-03
          • 2010-11-20
          • 1970-01-01
          相关资源
          最近更新 更多