2

我想做这个:

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

4 回答 4

1

有什么问题?

您的代码应该可以工作

>>> l=[1,2]
>>> while l:
...     print l
...     l.remove(min(l))
... 
[1, 2]
[2]
于 2012-06-25T19:54:12.770 回答
1

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

while len(list) > 0:
    for blah in blah:
        things
    list.remove(min(list))
于 2012-06-25T19:54:37.660 回答
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
于 2012-06-25T19:57:01.943 回答
1

您需要使用一个单独的变量bits来保存每条数据。bits在整个代码中重置,所以我建议使用类似的东西all_bits并更改bitsmin_addr_bits. 此外,您需要确保每一行不为空白,您将位附加到all_bits. 应要求发布的示例。

于 2012-06-26T00:41:02.323 回答