首页 > 解决方案 > 项目拒绝使用弹出功能、切片和删除删除,我该如何解决这个问题?

问题描述

所以我删除了我list的空索引

['','','','','A','B','C','','']

我用了

list.pop[0]
list.pop[1]
list.pop[2]
list.pop[3]
list.pop[-1]
list.pop[-2]

为了删除空对象。

但它不会删除前 2 项并跳到 [A] at list.pop[3],当我不打算这样做时删除数据。

出了什么问题,我该如何解决?对不起,非 Pythonic 代码。

这是我使用的确切代码。

import requests, re
from bs4 import BeautifulSoup 

url='https://bn.mappersguild.com/'

headers={"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}

page = requests.get(url, headers=headers)

soup = BeautifulSoup(page.content, 'html.parser')

osurow = soup.find('td', string='osu')
osu = osurow.find_parent("table", {"class": "table table-sm table-dark table-hover col-6 col-md-3"})

osutext = osu.get_text() 
osu = osu.find_all('a')

osuname = osutext.split('\n')

osuname.remove('osu')

osuname.pop(0)
osuname.pop(1)
osuname.pop(2)
osuname.pop(3) #Here's the point where it deletes - Mo - 
osuname.pop(-1)
osuname.pop(-2)
osuname.pop(-3) #Here's the point where it deletes Zelq


print ('osu!standard profile listing')
for element in osu:
    print(element)

print(osuname)

标签: python-3.x

解决方案


让我们监控osunamewhile popping 东西的内容:

>>> osuname = ['','','','','A','B','C','','']
>>> osuname.pop(0); osuname
''
['', '', '', 'A', 'B', 'C', '', '']
>>> osuname.pop(1); osuname
''
['', '', 'A', 'B', 'C', '', '']
>>> osuname.pop(2); osuname
'A'
['', '', 'B', 'C', '', ''] # HOLD ON!

随着你pop的事情,名单缩小了!因此,在 index 处找到的元素正在发生2变化:

# Original list
['','','','','A','B','C','','']
       ^^ <- index 2

# List after pop(0); pop(1)
['', '', 'A', 'B', 'C', '', '']
         ^^^ <- index 2

要从列表中删除空字符串,filter它:

>>> osuname = ['','','','','A','B','C','','']
>>> list(filter(lambda element: element != '', osuname))
['A', 'B', 'C']

推荐阅读