我无法从集合中删除条目。
# Remove all out-of-stock items from our list
# This is O(n^3), unfortunately.
for x in oos:
for asin in asins:
if x == asin[0]:
del asin
' asins'是一组元组,像这样创建:
asins.add(tuple((asin, c, s)))
oos是一个列表。我试图删除“asins'”中的所有条目。也存在于' oos中。不幸的是," del asin"实际上并不起作用,因为它不会删除“asins'”中的条目。
答案 0 :(得分:3)
del asin
只会删除局部变量asin
,而不会删除实际引用的对象,尤其不会删除集合中包含的对象。
相反,您需要调用set.remove
来删除元素:
asins.remove(asin)
但是,您实际上并不需要遍历该集以从中删除项目。集合的全部好处是你有持续的时间访问权限,所以你可以在恒定的时间内检查成员资格,使循环很少有用。
由于您正在存储复杂元组,并且您只通过第一个元组元素标识元素,因此您不能在此处执行此操作。你应该做的是切换到更合适的集合。在您的情况下,您需要一本字典:
# convert your set of tuples to a dictionary
# ideally, you would store the data like this in the first place
asins = { asin[0]: asin for asin in asins }
然后您可以执行以下操作:
for x in oos:
del asins[x] # here, you can use del
在平均情况下,这将是O(n)。