如何在Python中从列表的每个字符串元素中删除部分内容?

3

我有一个长长的日期列表,格式为 ["2019-11-01 00:15:00+01", "2019-11-01 00:30:00+01", "2019-11-01 00:45:00+01" ... 等等],以字符串的形式表示。 我想遍历这个列表并删除其中的“00:15:00+01”部分。我先用一个虚拟列表尝试了一下,但无法使其起作用。如何从列表中删除字符串元素的一部分?

    url = ['abcdc.com', 'tzr.com']
    for i in range(0,len(url)):
       if url[i].endswith('.com'):
          url[i] = url[:-4]

上面的代码仅返回:url = [[],[]]。为什么呢? 非常感谢您的帮助!

1
url[i] = url[:-4] 应改为 url[i] = url[i][:-4]。 - gpweb
4个回答

2
您可以使用split函数,如下所示:
dates = ["2019-11-01 00:15:00+01", "2019-11-01 00:30:00+01", "2019-11-01 00:45:00+01"]
new_dates = []
for date in dates:
    new_dates.append(date.split()[0])

打印新日期

['2019-11-01', '2019-11-01', '2019-11-01']

1
如果我理解正确,这样可以吗?
>>> url = ['abcdc.com', 'tzr.com']
>>> url = [x[:-4] if x.endswith('.com') else x for x in url]
>>> url
['abcdc', 'tzr']

1
您可以使用正则表达式仅提取日期。
import re
x = [re.search(r'\d{4}-\d{2}-\d{2}', l).group(0) for l in li ] 

['2019-11-01', '2019-11-01', '2019-11-01']

1
这可以解决你的问题:
url = ['abcdc.com', 'tzr.com']
for i in range(0, len(url)):
    if url[i].endswith('.com'):
        url[i] = url[i][:-4]

更好的解决问题的方法是使用split()函数,将data_time列表中的每个元素分开,代码如下:
date_time_list =["2019-11-01 00:15:00+01", "2019-11-01 00:30:00+01", "2019-11-01 00:45:00+01"]
date_list = []

for elem in date_time_list:
     if elem is None:
         date_list.append(None)
         continue
     date,time = elem.split()
     date_list.append(date)
print(date_list)
>>> ['2019-11-01', '2019-11-01', '2019-11-01']

谢谢,这很有帮助!但是我发现我的列表中有一个“nan”,并且出现了以下错误消息:“没有足够的值来解包(期望2个,得到1个)”。您知道我如何在不删除“nan”的情况下解决这个问题吗? - 123
1
对于date_time_list中的每个元素: 如果该元素为None: date_list.append(None) continue date,time = elem.split() date_list.append(date) - Baragorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接