【发布时间】:2012-06-27 02:53:24
【问题描述】:
我想这样做:
while list:
for blah in blah:
things
list.remove(min(list))
是否会循环直到列表中的所有项目都被删除?因为我有我的代码,它只是循环 [list] 次,然后从函数返回。我需要一个循环,直到列表中的所有项目都消失为止。
我应该注意,在最后一次迭代之前,中间(在 for 循环中)不会被处理。
根据要求,运行时的整个算法:
def parsexlsx(address):
bits = []
i = 0
while address:
min_address = False
for row in ws.iter_rows(row_offset=4,column_offset=3):
c = row[2]
d = row[3]
if not d.internal_value:
if min_address: #we set it to true, then kept going until blank row
break #bits is what you want it to be now
bits = [] #reset bits every time we hit a new row
continue #this will just skip to next row
for bits_cell in row[4:]:
if bits_cell.internal_value:
bits.append(bits_cell.internal_value)
if c.internal_value:
if c.internal_value == min(address):
min_address = True
address.remove(min(address))
print bits
return bits
【问题讨论】:
-
它只是循环 [list] 次 并且 我需要一个循环,直到列表中的所有项目都消失为止。它确实这样做了,出了什么问题?我们需要查看您的原始代码..
-
@MartijnPieters 我将用整个内容编辑原始帖子。
-
那么具体的问题是什么?看起来它对我来说很好用。
-
“在最后一次迭代之前(在 for 循环中)中间没有任何东西被处理”:你能证明一下吗?如果它只在第一次时起作用,我猜想 ws.iter_rows() 已经耗尽了它的来源,但如果你是对的,它是最后一个,那么它与什么有关在 for 循环中继续,
while/remove位只是一个红鲱鱼。 -
它只会在循环的最后一次迭代中处理 for 循环的内容。假设地址中的最大数字是20,它只有在下降到20时才会处理。
标签: python list while-loop