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)