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

2024-05-29 04:18:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

例:

    y_m_d="2022 November 20,2023 April 9"
    split_ymd=y_m_d.split(",")
    first_value=split_ymd[0]
    print(split_ymd[-1]) #This prints "0"

但是,将第二个参数添加到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命令为什么不起作用。我愿意接受关于改进代码本身的建议,但我真的只想知道为什么在他的情况下切片不起作用

谢谢


Tags: 函数字符串代码命令valueslicethisprints
3条回答

切片在这种情况下不工作,因为切片在任何情况下都不工作。它与.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

因此,我有两个建议:

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

有关如何控制datetime对象的字符串格式的详细信息,请参见https://docs.python.org/3/library/datetime.html

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

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

如果不清楚,请告诉我

它看起来像这样:

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"]

相关问题 更多 >

    热门问题