【问题标题】:How to remove all non numeric characters from a python 3 list?如何从 python 3 列表中删除所有非数字字符?
【发布时间】:2019-08-02 02:15:07
【问题描述】:

有人可以帮助我:

来自这个 python3 列表:

['{', ' "100": {', ' "AT": {', ' "av": -64.519, ', ' "ct": 17754, ', ' "mn": -96.023, ', ' "mx": -14.294', ' }, ', ' "First_UTC": "2019-03-08T23:09:35Z", '] 

我需要列出这个清单:

[100,-64.519,17754,-96.023,14.294,2019-03-08T23:09:35Z]

【问题讨论】:

  • 在我看来是一个奇怪的字典列表。
  • 是的,伙计,您需要返回源并正确获取数据。这看起来一团糟
  • 看来你拆分了一个字符串字典
  • 这是我从 json 文件创建的列表。这不是这里的问题。这是一个像任何列表一样的列表。我现在只需要保留数字。
  • 如果您有 JSON 文件,为什么要将输入视为列表?

标签: python python-3.x


【解决方案1】:

这应该是最接近您需要的。尽可能将值转换为 float 并将其余值转换为 datetime 对象

import re
import datetime
res=[]
a=['{', ' "100": {', ' "AT": {', ' "av": -64.519, ', ' "ct": 17754, ', ' "mn": -96.023, ', ' "mx": -14.294', ' }, ', ' "First_UTC": "2019-03-08T23:09:35Z", '] 
for i in a:
    m=re.search('([-]?\d{1,}[.\d]?[\w:-]*)',i)
    if m:
        try:
            tmp = float(m.group(0))
        except:
            tmp = datetime.datetime.strptime(m.group(0), '%Y-%m-%dT%H:%M:%SZ')
        res.append(tmp)

输出

[100.0,
 -64.519,
 17754.0,
 -96.023,
 -14.294,
 datetime.datetime(2019, 3, 8, 23, 9, 35)]

【讨论】:

    【解决方案2】:

    您的意见:

    l=['{', ' "100": {', ' "AT": {', ' "av": -64.519, ', ' "ct": 17754, ', ' "mn": -96.023, ', ' "mx": -14.294', ' }, ', ' "First_UTC": "2019-03-08T23:09:35Z", ']
    _
    

    分两步:

    l1= [re.sub("[^0-9-]", "", x) for x in l] 
    

    现在,您可以删除空文字并将其全部作为字符串获取。

    l2=[x for x in l1 if x!=""]
    

    您也可以翻译成 int,除了最后一个,因为“2019-03-08T23:09:35Z”不是有效的文字

    l3 = [int(x) for x in l2[:-1]]
    
    print(l3)
    [100, -64519, 17754, -96023, -14294]
    

    【讨论】:

    • 但它删除了 .我需要它 -64.519 不是 64519
    • 所以最好的解决方案是:l1= [re.sub("[^0-9-.]", "", x) for x in data] l2= [x for x in l1 if x!=""] l3 = [float(x) for x in l2[:-1]]
    猜你喜欢
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2010-11-17
    • 2014-04-26
    • 1970-01-01
    • 2013-01-19
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多