![](/img/trans.png)
[英]Loop through the lists of lists using Python and append to dataframe
[英]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_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 = 0的listB和listC将是
listB_0 = [2,4,3,2]
listC_0 = [3,5,3,7]
实现此目的的正确方法是什么?
布罗宾已经在他的评论中指出了这一点:整个列表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]
要追加的值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)
如评论中所述,您应该附加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.