获取下一个未处理列表列的pythonic方法是什么?

时间:2013-06-11 19:10:22

标签: python list

我正在做以下事情,它有效,但它并不优雅。我想知道是否有人对更漂亮的方法有任何见解。

假设我有n个布尔值,用户将设置为true或false。对于每个布尔值,都有一个关联函数do_something,它将名为myList的多维列表中的下一个未处理列作为输入。以下代码就是这样做的:

i=0
if boolean1:
    do_something1([a[i] for a in myList])
    i+=1
if boolean2:
    do_something2([a[i] for a in myList])
    i+=1
if boolean3:
    do_something3([a[i] for a in myList])
    i+=1
...

即使它有效,但我的一些东西告诉我,有一种更优雅的方式来做到这一点。似乎将列推入队列然后在其中一个布尔值满足时弹出它们会更好。但这似乎是一大笔开销。有没有人有任何建议?

3 个答案:

答案 0 :(得分:1)

首先转置myList(将行翻转到列中),然后迭代它。

for boolean, row in zip(booleans, zip(*myList)):
    if boolean:
        process(row)

内部zip是成语zip(*l)的一部分,用于转置列表。

答案 1 :(得分:1)

这样的东西?

processing = ((boolean1, do_something1), (boolean2, do_something2), 
              (boolean3, do_something3))
i=0
for b, process in processing:
    if b:
        process[(a[i] for a in myList])
        i+=1

答案 2 :(得分:1)

如果您可以将布尔值和功能放入列表中,您可以执行以下操作:

processing = zip(booleans, functions)

for i, action in enumerate([p for (b,p) in processing if b]):
    action([a[i] for a in myList])