Python 使用.split()函数后,切片不起作用
我正在尝试创建一个函数,它接受Y-m-D日期字符串的“day”部分。 例如: 输入:[“2022年11月23日2023年4月9日”] 产出:23 我尝试通过使用.split()函数在逗号处拆分字符串,然后将最后2个索引切掉以获得日期。然而,虽然我可以很容易地得到新拆分字符串的最后一个术语,但我不能得到第二个到最后一个术语 例: 但是,将第二个参数添加到slice命令会破坏它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="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"]
因此,我有两个建议:
有关如何控制datetime对象的字符串格式的更多详细信息,请参阅。您可以通过几种不同的方式解决此问题:
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)