Python不会从列表中删除项

Python不会从列表中删除项,python,list,Python,List,上面的一些原因代码给出了这个错误“ValueError:list.remove(x):x不在list中”,但很明显“p”在list中,那么为什么它没有检测到“p”,而是在查找“q” 我很难受,但任何帮助都是非常感谢的,谢谢 **很抱歉,我现在已经修好了*在一行中正确完成此操作的列表位于文章的底部。以下是对问题的一些见解 不要做以下事情: filtered_list = ['PerezHilton', 'tomCruise', 'q', 'p'] #BIO[user]['follows'] is

上面的一些原因代码给出了这个错误“ValueError:list.remove(x):x不在list中”,但很明显“p”在list中,那么为什么它没有检测到“p”,而是在查找“q”

我很难受,但任何帮助都是非常感谢的,谢谢


**很抱歉,我现在已经修好了*

在一行中正确完成此操作的列表位于文章的底部。以下是对问题的一些见解

不要做以下事情:

filtered_list = ['PerezHilton', 'tomCruise', 'q', 'p']
#BIO[user]['follows'] is just a list of strings say ['a', 'b', 'katieh']
#specs is also a string say eg. 'katieh'
for user in filtered_list:
    if specs not in BIO[user]['follows']:
        filtered_list.remove(user)
因为糟糕和混乱的事情发生了

for item in list_:
    list_.remove(item)
每次删除一个项时,都会更改其余项的索引,这会打乱循环。在遍历列表时,从列表中删除项目的一个好方法是按索引执行并向后工作,这样删除不会影响其余的迭代。这更好,因为如果移除第9个元素,那么第8个元素仍然是第8个元素,但是第10个元素成为第9个元素。如果您已经处理过该元素,那么您不必关心它的索引是什么

>>> list_ = range(10)
>>> for item in list_:
...     list_.remove(item)
... 
>>> list_
[1, 3, 5, 7, 9]
或使用
while
循环:

>>> list_ = range(10)
>>> for i in xrange(len(list_) - 1, -1, -1):
...     del list_[i]
... 
>>> list_
[]
在你的例子中,代码看起来像

i = len(list_)
while i:
    i -= 1
    del list_[i]
因为这是一项过滤工作,最好通过列表理解来完成。
[:]
的要点是,它将指定给列表的一个部分,而不是删除对列表的引用。这意味着对该列表的每一次其他引用都将被更新。它基本上已经就位,只是在覆盖原始列表之前复制了一个副本。为了完整性起见,下面介绍如何使用
while
循环执行此操作

users[:] = [user for user in users if specs in BIO[user]['follows']]
如果你想在适当的地方完成,你可以这样做。这里没有列表的副本。

为什么要迭代

i = len(users)
while i:
    i -= 1
    if specs not in BIO[users[i]]['follows']:
        del users[i]

我不明白。x变量的确切位置是什么?不需要迭代
。你为什么要删除不在中的东西?它没有给我这个错误(2.6)。如果规范不在联合国,你怎么能删除它…对不起,我犯了一个错误,新代码是固定的,但它是更大代码的一部分,检查用户是否不在BIO[user]['follows']中,然后删除该用户。katieh在列表中,因此应保留“用户”。我不明白为什么它在删除“q”时不删除“p”
>>> un = ['PerezHilton', 'tomCruise', 'q', 'p']
>>> un.remove('p')
>>> un
['PerezHilton', 'tomCruise', 'q']