首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在"-“python之后删除列表项中的所有字符,并将该项数据类型转换为浮动?

如何在"-“python之后删除列表项中的所有字符,并将该项数据类型转换为浮动?
EN

Stack Overflow用户
提问于 2022-09-16 22:07:34
回答 4查看 66关注 0票数 -4

我在python中有一个项目列表。

代码语言:javascript
运行
复制
lst=["2.6","2-3","7-8","9","10-11","1 Year","2 Weeks"]

我必须删除"-“之后的所有东西

我想要的期望清单

代码语言:javascript
运行
复制
lst=[2.6,2.0,7.0,9.0,10.0,"1 Year","2 Weeks"]

我怎样才能做到?

EN

回答 4

Stack Overflow用户

发布于 2022-09-16 22:24:05

有一种使用正则表达式的方法:

代码语言:javascript
运行
复制
import re

def one_elem(elem):
    if re.fullmatch('\d+', elem):
        return float(elem)
    if re.fullmatch('\d+\.\d+', elem):
        return float(elem)
    if re.fullmatch('\d+-\d+', elem):
        return float(elem.split('-')[0])

    return elem

lst=["2.6","2-3","7-8","9","10-11","1 Year","2 Weeks"]
lst = [one_elem(elem) for elem in lst]
lst

结果:

代码语言:javascript
运行
复制
[2.6, 2.0, 7.0, 9.0, 10.0, '1 Year', '2 Weeks']
票数 1
EN

Stack Overflow用户

发布于 2022-09-16 22:30:23

创建一个函数来执行转换:

代码语言:javascript
运行
复制
def convert(value):
    try:
        return float(value.split('-', 1))
    except ValueError:
        return value

然后使用它:

代码语言:javascript
运行
复制
result = [convert(value) for value in lst]

甚至:

代码语言:javascript
运行
复制
result = list(map(convert, lst))
票数 1
EN

Stack Overflow用户

发布于 2022-09-16 22:21:39

For split ,这是一个既可以完成split又可以转换为float的列表(我不会在项目中真正使用它,因为它不够明确!):

代码语言:javascript
运行
复制
[float(n) if (n:=s.split('-',1)[0]).replace('.','',1).isdigit() else s for s in lst]

注意:需要python≥3.8。

输出:[2.6, 2.0, 7.0, 9.0, 10.0, '1 Year', '2 Weeks']

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73750712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档