使用推导式编辑列表元素会删除列表的一部分

Editing list elements using comprehension deletes part of list

我从网上抓取了一些嵌套列表 table,我想 'clean' 通过删除无用的 HTML 字符。它们看起来像这样:

example_list = ['12.7x55 mm PS12B',
  '<td style="border-bottom:solid 2px">102\n</td>',
  '<td style="border-bottom:solid 2px">46\n</td>',
  '<td style="border-bottom:solid 2px">57\n</td>',
  '<td style="border-bottom:solid 2px; background-color:#00990080;">6\n</td>',
  '<td style="border-bottom:solid 2px; background-color:#00640080;">5\n</td>',
  '<td style="border-bottom:solid 2px; background-color:#FB9C0E80;">4\n</td>']

我希望它看起来像这样:

my_list =  ['12.7x55 mm PS12B', '102', '46', '57', '6', '5', '4']

我尝试了简单的理解:

my_list[1:] = [i.replace('\n</td>', '') for i in list] # works perfectly
my_list[1:] = [i.replace('<td>', '') for i in list] # works perfectly
# for example the second item in the list is now `102`
# not `<td style="border-bottom:solid 2px">102\n</td>`

但是当我尝试使用更具体的理解来编辑最后六个元素时:

my_list[1:] = [i.replace(i, i[-1]) for i in list if "back" in i]

它删除了我刚刚提取的所有其他列表元素,最后我得到:

my_list =  ['12.7x55 mm PS12B', '6', '5', '4']

我确信 HTML 有一种不那么晦涩的方法可以做到这一点(我很乐意知道)但我主要担心的是我不明白简单的 python理解。

其余元素在推导中被if条件过滤掉。如果你想保留它们,你需要添加 else 子句:

my_list[1:] = [
    i.replace(i, i[-1])
    for i in list
    if "back" in i
    else i  # or however you wish to process the rest of the elements
]