Python循环遍历列表并根据条件追加

时间:2015-07-14 13:17:35

标签: python list for-loop append conditional-statements

我有3个很长的列表(长度为15,000)。让我们说例如三个列表是:

A    B    C
0    2    3
0    4    5
0    3    3
1    2    6
1    3    5
0    2    7
1    8    8

我想获得B和C的所有值,即A的相应索引为0.例如,如果A[i] == 0,那么我想将B[i]添加到listB_0 }和C[i]listC_0

我试过

listB_0 = []
listC_0 = []

for a,b,c in zip(A,B,C):
    if a == 0:
        listB_0.append(B)
        listC_0.append(C)

但这似乎让Python经历了一个永无止境的循环,即使在5分钟之后,我也看到该程序仍在运行。

我最终想要的是,例如listA和listC,listA = 0将是

listB_0 = [2,4,3,2]
listC_0 = [3,5,3,7] 

实现这一目标的正确方法是什么?

4 个答案:

答案 0 :(得分:1)

Brobin已经在他的评论中指出了这一点:代替bc,整个列表BC会被追加。

这应该有效:

A = [0, 0, 0, 1, 1, 0, 1]
B = [2, 4, 3, 2, 3, 2, 8]
C = [3, 5, 3, 6, 5, 7, 8]

listB_0 = []
listC_0 = []

for a, b, c in zip(A,B,C):
    if a == 0:
        listB_0.append(b)
        listC_0.append(c)

print listB_0
print listC_0

>>> 
[2, 4, 3, 2]
[3, 5, 3, 7]

答案 1 :(得分:1)

您希望为b追加listB_0c的值listC_0,而不是列表本身。

for a,b,c in zip(A,B,C):
    if a == 0:
        listB_0.append(b)
        listC_0.append(c)

答案 2 :(得分:1)

如评论中所述,您应该添加b而不是B。我想要注意的是,你可以使用列表理解而不是循环来获得结果" pythonic"方式。

A = [0, 0, 0, 1, 1, 0, 1]
B = [2, 4, 3, 2, 3, 2, 8]

listB_0 = [b for a, b in zip(A, B) if a == 0]
print(listB_0)  # [2, 4, 3, 2]

答案 3 :(得分:1)

这里真的没有zip()

# use xrange(len(A)) if in Python 2
for i in range(len(A)):
    if A[i] == 0:
        listB_0.append(B[i])
        listC_0.append(C[i])