删除单独列表中的项目时,For循环停止-Python
我正在学习Python,并且发现由于某种原因,我的for循环将停止,即使有更多的“循环”要去 只有当我从列表中删除一个项目时才会发生这种情况。如果删除被注释掉,它会工作:打印“运行列表”两次,它会检查列表中的2项和2项。如果一个项目被删除,它将打印一次,并且只检查一个项目,而不是另外两个项目。这两次控制台都没有错误 当原始列表不受影响时,它将使用独立列表变量停止:删除单独列表中的项目时,For循环停止-Python,python,loops,for-loop,Python,Loops,For Loop,我正在学习Python,并且发现由于某种原因,我的for循环将停止,即使有更多的“循环”要去 只有当我从列表中删除一个项目时才会发生这种情况。如果删除被注释掉,它会工作:打印“运行列表”两次,它会检查列表中的2项和2项。如果一个项目被删除,它将打印一次,并且只检查一个项目,而不是另外两个项目。这两次控制台都没有错误 当原始列表不受影响时,它将使用独立列表变量停止:indendent\u list=looping\u list。也可以使用list.remove(x),list.pop(x)和del
indendent\u list=looping\u list
。也可以使用list.remove(x)
,list.pop(x)
和del list[x]
停止
目前的问题代码是:dellistings\u to\u add[listing\u count]
以下是我的代码,简而言之(我认为):
从长远来看:
listings_to_add = new_listing_list
for listing_count, listing in enumerate(new_listing_list):
found = False
print('\nRUNNING LISTING\n')
#Checks the listing against all in DB
for count, i in enumerate(id_in_DB):
if not found:
# Checks links - cuts them to listingID
if str(listing[4]).split('?rsqid')[0] == i[1].split('?rsqid')[0]:
same_link = True
del listings_to_add[listing_count]
found = True
else:
print(f'Different link: "{listing[4]}" \nWith DB.......: "{i[1]}"')
我读过关于为什么从你正在运行的列表中删除会产生bug的帖子,这是我首先做的,但在更改后仍然会停止。任何帮助都将不胜感激。您可以使用列表理解来解决此问题
for A in ListX:
for B in ListY:
if A in ListY:
ListX - remove(A)
作为
您的问题是您正在迭代
新列表
,但是列表
是一个别名,因此当您删除列表
添加[列表计数]时,您正在影响新列表
我把你的密码弄乱了。试试这个:
listings_to_add = []
for listing_count, listing in enumerate(new_listing_list):
for count, i in enumerate(id_in_DB):
if str(listing[4]).split('?rsqid')[0] == i[1].split('?rsqid')[0]:
same_link = True
break
listings_to_add.append(listing)
print(f'Different link: "{listing[4]}" \nWith DB.......: "{i[1]}"')
“从正在运行的列表中删除会产生bug”:您仍在这样做
listings\u to\u add=new\u listing\u list
不会创建新列表。试试listings\u to\u add=new\u listing\u list[:]
。我相信list(new\u listing\u list)
比new\u listing\u list[:]
更能传达信息。顺便说一句,简短的代码没有意义,因为你没有使用B
。
listX = [x for x in listX if x not in listY]
listings_to_add = []
for listing_count, listing in enumerate(new_listing_list):
for count, i in enumerate(id_in_DB):
if str(listing[4]).split('?rsqid')[0] == i[1].split('?rsqid')[0]:
same_link = True
break
listings_to_add.append(listing)
print(f'Different link: "{listing[4]}" \nWith DB.......: "{i[1]}"')