从列表中删除项目作为while循环的“触发器”

时间:2012-06-25 19:49:58

标签: python list while-loop

我想这样做:

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 

4 个答案:

答案 0 :(得分:1)

有什么问题?

您的代码应该正常工作

>>> l=[1,2]
>>> while l:
...     print l
...     l.remove(min(l))
... 
[1, 2]
[2]

答案 1 :(得分:1)

也许你正在寻找这样的东西?

while len(list) > 0:
    for blah in blah:
        things
    list.remove(min(list))

答案 2 :(得分:1)

是的,看到字符串foobar被打印10次,等于A的长度

>>> A=[1,1,2,3,3,3,4,5,6,6]
>>> while A:
     print('foobar')
     A.remove(min(A))


foobar
foobar
foobar
foobar
foobar
foobar
foobar
foobar
foobar
foobar

答案 3 :(得分:1)

您需要使用bits中的单独变量来保存每条数据。 bits会在整个代码中重置,因此我建议您使用all_bits之类的内容,并将bits更改为min_addr_bits。此外,您需要确保每个非空行都将位添加到all_bits。根据要求发布示例。