Python 如何使用str函数和字符串索引/切片将字符串转换为浮点值?

Python 如何使用str函数和字符串索引/切片将字符串转换为浮点值?,python,Python,标题可能有点让人困惑,但我的意思是说我有一个字符串s=“text,7.4,text,7.2,text,7.6,”,我想把数字7.4 7.2 7.6取出来,并将它们转换成float。如何仅使用简单的str函数(如find()或字符串索引/切片)来实现这一点 我曾尝试使用replace()删除所有逗号和单词,但遇到了数字没有隔开的问题:>7.47.27.6因此无法转换为float;我不知道如何解释这一点,因为我的字符串的间距不一致。谢谢您可以像这样一步一步地清理文本: >>s=“text,7.4,t

标题可能有点让人困惑,但我的意思是说我有一个字符串
s=“text,7.4,text,7.2,text,7.6,”
,我想把数字
7.4 7.2 7.6
取出来,并将它们转换成float。如何仅使用简单的str函数(如
find()
或字符串索引/切片)来实现这一点


我曾尝试使用
replace()
删除所有逗号和单词,但遇到了数字没有隔开的问题:
>7.47.27.6
因此无法转换为float;我不知道如何解释这一点,因为我的字符串的间距不一致。谢谢

您可以像这样一步一步地清理文本:

>>s=“text,7.4,text,7.2,text,7.6,”
>>>列表_of_字符串=[s.strip()表示s在s.split中(“,”)如果s]
>>>列出\u字符串的\u
['text','7.4','text','7.2','text','7.6']
>>>list_of_strings=[s代表_字符串列表中的s,如果不是s.isalpha()]
>>>列出\u字符串的\u
['7.4', '7.2', '7.6']
>>>nums=[字符串列表中num的浮点(num)]
>>>努姆斯
[7.4, 7.2, 7.6]
>>>
或者,把它们放在一起:

>>[浮动(elem.strip())用于s.split(“,”)中的elem,如果是elem而不是elem.strip().isalpha()]
[7.4, 7.2, 7.6]
>>>

如果您的数字总是交替放置在字符串之间,那么您可以使用切片作为:

下面是对上述代码的逐步解释:

  • 首先使用
    my_str.replace(“,”)
  • 根据逗号
    拆分列表,以使用
    获取单词列表。拆分(',')
  • start
    as
    1
    和step as
    2
    对列表进行切片,以使用
    [1::2]
  • 使用
    map(float,)

  • 但是,如果数字在字符串中随机分布,那么您可以通过附加条件检查修改上述逻辑(这次使用列表理解),以在迭代期间将数字标识为:

    >>> s =" text, 7.4, 9.5, text , 7.2, 8.6,text,7.6,"
      
    >>> [float(n) for n in s.replace(" ", "").split(",") if n.replace('.','',1).isdigit()]
    [7.4, 9.5, 7.2, 8.6, 7.6]
    

    但是,在这种情况下,您不需要索引或切片。

    您可以这样做:

    >>> [float(n) for n in s.split(',')[1::2]]
    

    当项目无法转换为浮动时,您可以使用此代码并捕获异常:

    l = []
    for item in s.split(','):
        try:
            l.append(float(item.strip()))
        except ValueError:
            continue
    print(l)
    #[7.4, 7.2, 7.6]
    

    请提供您的尝试代码。数字是否总是交替放置在字符串之间?如果您有这样一个字符串:s=“text,7.4,text,7.2,text,7.6,3.5”,会发生什么情况?@pakpe它将忽略最后一个数字。但是,我的答案是基于给定的情况是的,如果字符串位于奇数索引,它将忽略偶数索引处的所有数字,并给出ValueError。
    l = []
    for item in s.split(','):
        try:
            l.append(float(item.strip()))
        except ValueError:
            continue
    print(l)
    #[7.4, 7.2, 7.6]