Python用一个列表理解创建两个列表

时间:2018-07-17 19:56:25

标签: python performance list-comprehension

我目前正在使用嵌套的for循环将数据一次添加到两个列表中。参见下面的代码。

标题,在下面的代码中是一个漂亮的汤对象。

openData = [] 
count = 0
openC = 7

closeData = [] 
closeC = 10

for j in headers:
        for z in j:
            for data in z:
                count += 1
                if count == 1:
                    openData.append(data)
                elif count == openC:
                    openData.append(data)
                    openC += 6

                if count == 4:
                    closeData.append(data)
                elif closeC == count:
                    closeData.append(data)
                    closeC += 6

这里的两个列表是openData和closeData。 作为一个粗略的例子,我知道我可以做类似

openData = [data for j in headers for z in j for data in z] 
closeData = [data for j in headers for z in j for data in z]

我担心这大约需要两倍的时间,因为循环操作要执行两次。但是有一种方法可以将

这样的两个语句组合在一起
openData, closeData =  [list comprehension]

对于如何将if,elif逻辑合并到列表理解中,我也感到困惑。最后,这是我应该做的事情吗?否则会滥用列表理解力。我写的上面的代码有效,但是看起来很丑。我的目标是编写比我现有的更好的代码。

1 个答案:

答案 0 :(得分:2)

我的尝试(带有一些基本的初始数据):

#some initial data
data = list(range(20))

openData, closeData = data[1::6], data[4::6]

print(openData, closeData)

打印:

[1, 7, 13, 19] [4, 10, 16]