Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python替换列表中的值_Python_Python 3.x - Fatal编程技术网

Python替换列表中的值

Python替换列表中的值,python,python-3.x,Python,Python 3.x,我有一个如下列表: stuff = ['\n', '<td><nobr>8h</nobr></td>', '\n', '<td><nobr>2021-04-02 14:27:44.729</nobr></td>', '\n', '<td class="text-right">1.73</td>;', '\n'] stuff = ["8h"

我有一个如下列表:

stuff = ['\n', '<td><nobr>8h</nobr></td>', '\n', '<td><nobr>2021-04-02 14:27:44.729</nobr></td>', '\n', '<td class="text-right">1.73</td>;', '\n']
stuff = ["8h","2021-04-02 13:27:44.729","1.73"]
我想做的是:

for x in range(0,len(stuff),1):
     stuff[x] = stuff[x].replace("\n","")
     stuff[x] = stuff[x].replace("<td>","")
范围内x的
(0,len(stuff),1):
stuff[x]=stuff[x]。替换(“\n”,”)
stuff[x]=stuff[x]。替换(“,”)
我希望删除字符,如果他们在那里。如果不是的话,我希望那部分可以跳过

我收到的错误消息是

非类型对象不可调用

有什么建议吗

编辑#1

['8h', '2021-04-02 14:27:44.729', '1.73']

我相信这与把事情搞砸的
\n
价值观有关。我不确定这是否准确,但这是我的感觉。

我应该说我对我的代码绝对不感到自豪,但以下是我的想法:

import re
stuff = ['\n', '<td><nobr>8h</nobr></td>', '\n', '<td><nobr>2021-04-02 14:27:44.729</nobr></td>', '\n', '<td class="text-right">1.73</td>;', '\n']
def get_stuff(el):
    pattern1 = "<td><nobr>(?P<inner>.+)<\/nobr><\/td>"
    pattern2 = "<td class=(\s+)?\".+\"(\s+)?>(?P<inner>.+)\<\/td>"
    result1 = re.search(pattern1, el)
    result2 = re.search(pattern2, el)
    if result1:
        return result1.group("inner")
    if result2:
        return result2.group("inner")
last_list = list(map(get_stuff, stuff))
print( [x for x in last_list if x is not None])
更新

所以我想出了一个更好的主意(仍然不为之自豪)


如果我的理解正确,您希望删除两种类型的内容:

  • 介于
    之间的任何内容
  • 不需要的字符列表,例如
    \n
  • 下面的代码片段完成了这项工作

    
    stuff = ['\n', '<td><nobr>8h</nobr></td>', '\n', '<td><nobr>2021-04-02 14:27:44.729</nobr></td>', '\n', '<td class="text-right">1.73</td>;', '\n']
    
    import re
    ans = []
    for x in stuff:
        x = re.sub(r"<.*?>", "", x) # remove <>
        x = re.sub(r"(\n|;)", "", x) # remove unwanted characters
        if x: ans.append(x)
    
    print(ans) 
    
    
    stuff=['\n',8h','\n',2021-04-0214:27:44.729','\n',1.73;','\n']
    进口稀土
    ans=[]
    对于stuff中的x:
    x=re.sub(r“”,x)#移除
    x=re.sub(r“(\n |”),“”,x)#删除不需要的字符
    如果x:ans.append(x)
    打印(ans)
    
    为什么
    用于范围内的x(0,len(stuff),1):
    而不是
    用于stuff中的x:
    ?此外,这可能会有所帮助:。我将查看链接,但使用范围(0,len(stuff),1)中的x正是我一直使用的方式。是否有理由使用1而不是另一个?我在想,如果你在打循环之前不小心将东西设置为“无”。您是否尝试过使用断点单步执行代码并对其进行调试?另外,我假设在实际代码中,数组中的第二项也是字符串。现在只有\n是字符串。
    对于stuff中的x来说更干净-除非您特别需要用于计算的索引,否则您可以使用beautifulsoup,以防您已经安装了(似乎您已经删除了这些数据)。然后从列表中的每个元素中获取文本:soup=BeautifulSoup(“8h”,“lxml”)soup.find(“td”).text我会玩它,任何人拥有的任何解决方案都比我目前拥有的要好。谢谢,我刚刚更新了我的解决方案,希望能有所帮助
    
    ['8h', '2021-04-02 14:27:44.729', '1.73']
    
    
    stuff = ['\n', '<td><nobr>8h</nobr></td>', '\n', '<td><nobr>2021-04-02 14:27:44.729</nobr></td>', '\n', '<td class="text-right">1.73</td>;', '\n']
    
    import re
    ans = []
    for x in stuff:
        x = re.sub(r"<.*?>", "", x) # remove <>
        x = re.sub(r"(\n|;)", "", x) # remove unwanted characters
        if x: ans.append(x)
    
    print(ans)