使用理解编辑列表元素会删除列表的一部分



我从一个web刮取的表中有许多嵌套列表,我想通过删除无用的HTML字符来"清理"这些列表。它们看起来像这样:

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

最新更新