Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换列表中每个项目的未知第一个字符时,键入错误_Python - Fatal编程技术网

Python 替换列表中每个项目的未知第一个字符时,键入错误

Python 替换列表中每个项目的未知第一个字符时,键入错误,python,Python,我有一个带有短月份名称的数组,如下所示 dates_array = ['Jan 12', 'Feb 23', 'Mar 24', 'Apr 25', 'Nov 26'] 我想将每个短月份的名称改为月份号,后跟/。 我希望生成的dates_数组如下所示: dates_array = ['1/12', '2/23', '3/24', '4/25', '11/26'] short\u month\u to\u number功能和下面的三行程序出现以下类型错误: TypeError: list in

我有一个带有短月份名称的数组,如下所示

dates_array = ['Jan 12', 'Feb 23', 'Mar 24', 'Apr 25', 'Nov 26']
我想将每个短月份的名称改为月份号,后跟
/
。 我希望生成的dates_数组如下所示:

dates_array = ['1/12', '2/23', '3/24', '4/25', '11/26']
short\u month\u to\u number
功能和下面的三行程序出现以下类型错误:

TypeError: list indices must be integers or slices, not str
节目如下:

def short_month_to_number (short_month_name):
    switcher = {

        "Jan": 1,
        "Feb": 2,
        "Mar": 3,
        "Apr": 4,
        "May": 5,
        "Jun": 6,
        "Jul": 7,
        "Aug": 8,
        "Sep": 9,
        "Oct": 10,
        "Nov": 11,
        "Dec": 12
    }
    return (switcher.get(short_month_name))

dates_array = ['Jan 12', 'Feb 23', 'Mar 24', 'Apr 25', 'Nov 26']
dates_array = [dates_array[x].replace(x[:4], short_month_to_number (x[:4])+'/') for x in dates_array]
print (dates_array)

您正在使用[x]索引日期数组,该[x]是日期数组中的字符串。 修复了一些其他索引和类型问题,这将提供所需的输出:

def short_month_to_number (short_month_name):
    switcher = {
        "Jan": 1,
        "Feb": 2,
        "Mar": 3,
        "Apr": 4,
        "May": 5,
        "Jun": 6,
        "Jul": 7,
        "Aug": 8,
        "Sep": 9,
        "Oct": 10,
        "Nov": 11,
        "Dec": 12
    }
    return switcher.get(short_month_name)

dates_array = ['Jan 12', 'Feb 23', 'Mar 24', 'Apr 25', 'Nov 26']
dates_array = [x.replace(x[:4], str(short_month_to_number(x[:3])) + '/') for x in dates_array]
print (dates_array)

您有多个问题:

  • x
    是来自
    dates\u数组的项,而不是索引。所以
    dates\u数组[x]
    没有意义
  • 您正试图将
    int
    (返回值
    short\u month\u to\u number
    )与str连接起来
  • x[:4]
    也将包含月份后的空格,您应该使用
    x[:3]
  • 试试这个:

    dates_array = [x.replace(x[:4], str(short_month_to_number(x[:3])) + '/') for x in dates_array]
    
    也就是说,您还可以使用
    datetime
    模块中的日期格式功能:

    from datetime import datetime
    print([datetime.strptime(d, '%b %d').strftime('%-m/%d') for d in dates_array])
    

    请注意,
    %-m
    是特定于平台的,在Windows上不可用。如果是这种情况,请使用零填充变量(
    %m
    )。

    您的解决方案非常有效。谢谢你的详细解释。我错放的第一期。感谢您建议使用日期格式功能,因为我需要将更多的奇数日期格式转换为短格式。您使用datetime格式化函数的想法可能会节省编码时间。我尝试了使用日期格式化函数的代码,但出现以下错误:ValueError:时间数据“1/12”与格式“%b%d”不匹配。您似乎正在向该函数传递一个已转换的日期(
    1/12
    )。您应该传递原始格式(
    Jan 12
    )我传递了原始格式,但收到了另一个错误:ValueError:无效的格式字符串。结果表明,
    %-m
    是特定于平台的,在Windows上不可用。更新了我的答案以反映这一点。