Python 使用.split()函数后,切片不起作用

Python 使用.split()函数后,切片不起作用,python,python-3.x,Python,Python 3.x,我正在尝试创建一个函数,它接受Y-m-D日期字符串的“day”部分。 例如: 输入:[“2022年11月23日2023年4月9日”] 产出:23 我尝试通过使用.split()函数在逗号处拆分字符串,然后将最后2个索引切掉以获得日期。然而,虽然我可以很容易地得到新拆分字符串的最后一个术语,但我不能得到第二个到最后一个术语 例: 但是,将第二个参数添加到slice命令会破坏它 y_m_d="2022 November 20,2023 April 9" split_ymd=y_m_d

我正在尝试创建一个函数,它接受Y-m-D日期字符串的“day”部分。 例如: 输入:[“2022年11月23日2023年4月9日”] 产出:23

我尝试通过使用.split()函数在逗号处拆分字符串,然后将最后2个索引切掉以获得日期。然而,虽然我可以很容易地得到新拆分字符串的最后一个术语,但我不能得到第二个到最后一个术语

例:

但是,将第二个参数添加到slice命令会破坏它

    y_m_d="2022 November 20,2023 April 9"
    split_ymd=y_m_d.split(",")
    first_value=split_ymd[0]
    print(split_ymd[-1:-2]) #This prints "[]" 
我知道上面的一些术语可能不正确,因为我是一个学习python和一般编程的新手,上面的代码非常凌乱,但是我需要帮助了解上面的slice命令为什么不起作用。我愿意接受关于改进代码本身的建议,但我真的只想知道为什么在他的情况下切片不起作用


谢谢

切片在这种情况下不工作,因为切片在任何情况下都不工作。它与
.split()
或您正在做的任何事情无关

考虑这个更简单的测试用例:

>>> [1,2,3,4][-1]
4
>>> [1,2,3,4][-1:-2]
[]
这是因为
-1
指的是索引3,-2指的是索引2,而span
[3,2)
是向后的,所以它被视为空的

如果您确实想要一个范围,可以交换它们:

>>> [1,2,3,4][-2:-1]
[3]
或者,如果需要最后一个元素中的第二个元素,可以使用
-2

>>> [1,2,3,4][-2]
3

您可以在逗号上拆分初始列表,以创建包含 多个字符串,每个字符串表示一个日期

然后迭代这些日期,将它们按空格分开。后续列表中的最后一个值是您要查找的日期值

如果不清楚,请告诉我

它看起来像这样:

list_of_dates = ["2022 November 23, 2023 April 9"] 

# This separates all dates by splitting on the comma
dates = "".join(list_of_dates).split(",")

days = []
for d in dates:
    # This splits each date on the space
    temp = d.split(" ")
    days.append(temp[-1])

print(days)
# Output: ["23", "9"]

因此,我有两个建议:

  • 尝试学习python切片的工作原理(负数和正数)
  • 对于您的实际解决方案,我看到了一个日期列表。用逗号将其分隔,然后将日期解析为datetime对象,这可能会使事情变得更简单

  • 有关如何控制datetime对象的字符串格式的更多详细信息,请参阅。

    您可以通过几种不同的方式解决此问题:

  • 使用len函数:
  • 使用负索引:
  • 神奇的
    datetime
    模块! 第一课:让内置软件为您完成繁重的工作!

    下面是解析日期字符串并返回日期的函数示例。此外,下面是如何使用该函数的示例实现

    希望这有帮助

    职能: 实施: 输出: 那么:

    ymd="2022 November 20,2023 April 9"
    lchar = ymd.find(',')
    fchar = lchar-2
    d_int = int(y_m_d[fchar:lchar])
    print(d_int)
    

    如果日期后只有一个逗号,这应该是你想要的。

    提示:想想
    a_列表[start:stop:step]
    范围(start,stop,step)
    ;)
    # For example,
    date_str_list = "2022 November 20,2023 April 9"
    for date_str in date_str_list.split(","):
        date = datetime.datetime.strptime(date_str, "%Y %B %d")
        day = date.day
    
    date = "2013 November 20,2023 April 10"     
    splitted = date.split(',')
    splitted[0][len(splitted[0])-2:]
    
    date = "2013 November 20,2023 April 10"    
    splitted = date.split(',')
    splitted[0][-2:]
    
    from datetime import datetime as dt
    
    def extract_day(date_string, mask='%Y %B %d'):
        """Extract and return the day.
    
        Args:
            date_string (str): Date text as a string.
            mask (str): Format of the provided date string, 
                used for parsing.
    
        """
        day = dt.strptime(date_string, mask).day
        return day
    
    dates1 = "2022 November 20,2023 April 9"
    dates2 = "20 Nov 2022,9 Apr 2023"
    
    date_strings1 = dates1.split(',')
    date_strings2 = dates2.split(',')
    
    for date in date_strings1:
        day = extract_day(date)
        print('\nOriginal string: {}'.format(date))
        print('Extracted day: {}'.format(day))
    
    for date in date_strings2:
        day = extract_day(date, mask='%d %b %Y')
        print('\nOriginal string: {}'.format(date))
        print('Extracted day: {}'.format(day))
    
    Original string: 2022 November 20
    Extracted day: 20
    
    Original string: 2023 April 9
    Extracted day: 9
    
    Original string: 20 Nov 2022
    Extracted day: 20
    
    Original string: 9 Apr 2023
    Extracted day: 9
    
    ymd="2022 November 20,2023 April 9"
    lchar = ymd.find(',')
    fchar = lchar-2
    d_int = int(y_m_d[fchar:lchar])
    print(d_int)