现在是这样的
for i in the_list:
if do_something_sucsess:
remove_the_item_in_the_list
else:
do_something_else
现在的问题在于,即使这个操作不成功,这个元素也被跳过了(虽然它还在列表中)。如何能保证它一定被操作成功呢?
我想了很久一直没想明白
再及。。。 V2EX 怎么缩进啊- -
1
loading 2015-08-27 10:16:12 +08:00 via Android 1
不是你哪里写错了,试下加入 print 调试~
|
3
loading 2015-08-27 10:21:10 +08:00 via Android
请在每一句你的代码都写出 print 。不要过于自信。
先写没有 if 的,看列表 print 全没! |
5
Kilerd 2015-08-27 10:21:55 +08:00 via Android 1
次后,跳出。
手机打就是麻烦了 |
6
loading 2015-08-27 10:23:02 +08:00 via Android
就你这点代码,真的没法帮…
因为我们写一个,绝对是跑全的~ |
7
hicdn 2015-08-27 10:29:43 +08:00 1
list 不能在遍历时删除元素
|
9
shierji OP @Kilerd
@loading https://gist.github.com/reee/2e81c4ff6754b785ea4a 现在是用关键词去 google 搜索,是自己搭的 google 镜像。因为 google 在搜索过多次以后会出验证码。 所以现在是如果这个关键词出的结果不对, scrape_keyword_count ()会返回 none 表示出错了。这个时候继续调之前那个地址去搜索是没意义的。需要从地址列表里面再取一个地址来进行搜索。 现在的问题是,不管搜索是否成功这个关键词都会被跳过。不能确保取到所有词的结果。 |
10
shierji OP |
11
aec4d 2015-08-27 10:47:14 +08:00
你可以试试这样用双端队列 取出一个如果失败再添加插入进去
https://gist.github.com/anonymous/dd7e34a3a211c9cc9764 |
12
hahastudio 2015-08-27 10:48:26 +08:00 1
当你在 for 循环里修改这个 list 的时候,你总会把自己弄得一团糟
最简单的方法,用一个 deep copy 去循环 http://stackoverflow.com/questions/6022764/python-removing-list-element-while-iterating-over-list http://stackoverflow.com/questions/5401601/problem-deleting-list-items-in-a-for-loop-python |
13
Sylv 2015-08-27 10:53:18 +08:00 1
遍历列表时删除列表里的元素是会出问题的,要复制个新列表再遍历:
for i in the_list[:]: if do_something_sucsess: remove_the_item_in_the_list else: do_something_else |
14
zhyu 2015-08-27 11:04:35 +08:00 1
不能一边遍历一边删。。你可以用 filter
|
16
Sylv 2015-08-27 11:17:02 +08:00
for 循环是只能取一次,如果我没有理解错你的问题的话,可以这样解决:
for i in the_list[:]: ... while not do_something_sucsess: ... ... do_something_else ... remove_the_item_in_the_list |
17
virusdefender 2015-08-27 11:17:03 +08:00
边遍历边删会出问题的 我遇到过
|
19
Sylv 2015-08-27 11:40:17 +08:00 1
@shierji 我没理解对?你不是要将搜索失败的关键字重新用新地址再搜一次直到成功吗? 11 楼的方法不就是关键词失败后再加到队列末尾排队到后再用新地址搜索一遍?我觉得是有点多此一举啦,失败了马上取新地址再搜直到成功就好啦,为什么还要再加到队列里去一遍呢?
for k in keywords_list[:]: ... url = get_google_add_url () ... keyword_count = scrape_keyword_count (url ) ... while not keyword_count: ... ... remove_bad_google_add () ... ... url = get_another_google_add_url () ... ... keyword_count = scrape_keyword_count (url ) ... add_keyword_count (keyword_count ) ... remove_keyword_from_list (k ) |
21
kxxoling 2015-08-27 14:57:20 +08:00
刚刚在 StackOverflow 上看到同样的问题,那个也是楼主吗?
|