我有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]
实现这一目标的正确方法是什么?
答案 0 :(得分:1)
Brobin已经在他的评论中指出了这一点:代替b
或c
,整个列表B
或C
会被追加。
这应该有效:
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_0
和c
的值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])