繁体   English   中英

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

[英]Python loop through lists and append according to conditions

我有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_0C[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 = 0的listB和listC将是

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

实现此目的的正确方法是什么?

布罗宾已经在他的评论中指出了这一点:整个列表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]

要追加的值blistB_0clistC_0 ,而不是名单本身。

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

如评论中所述,您应该附加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]

这里确实不需要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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM