为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2022-07-26 11:06:45
我正在尝试创建一个函数,该函数采用 YMD 日期字符串的“日”部分。例如:输入:[“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 命令不起作用。我对改进代码本身的建议持开放态度,但我真的只想知道为什么切片在他的情况下不起作用。
查看完整描述

5 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

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


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


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

4

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

[]

发生这种情况是因为-1引用索引 3 而 -2 引用索引 2,并且跨度[3,2)是向后的,因此它被视为空。


如果你真的想要一个范围,你可以交换它们:


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

[3]

或者,-2如果您想要倒数第二个元素,则可以使用:


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

3


查看完整回答
反对 回复 2022-07-26
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

怎么样:


ymd="2022 November 20,2023 April 9"

lchar = ymd.find(',')

fchar = lchar-2

d_int = int(y_m_d[fchar:lchar])

print(d_int)

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


查看完整回答
反对 回复 2022-07-26
?
墨色风雨

TA贡献1853条经验 获得超6个赞

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


然后遍历这些日期,用空格分隔它们。后续列表中的最后一个值是您要查找的日期值。


如果不清楚,请告诉我。


它看起来像这样:


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


查看完整回答
反对 回复 2022-07-26
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

所以,我在这里有两个建议:

  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

有关如何控制日期时间对象的字符串格式的更多详细信息,请参阅https://docs.python.org/3/library/datetime.html 。


查看完整回答
反对 回复 2022-07-26
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

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


使用 len 函数:

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


查看完整回答
反对 回复 2022-07-26
  • 5 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号