2013-03-14 57 views
-1

我必须比较具有相同长度的两个元素列表。 (例如[0,562,256,0,0,856][265,0,265,0,874,958],这两个列表都有一个数量为零和数量在249以上的数字。我想比较这些列表。如果在索引处两个列表都有一个不同于0的数字,则该数字应该保存在列表中该结果应该是两个清单只数相同长度的上述249(在本例[256,856][265,958])感谢您的帮助将两个列表与零和较大的数字进行比较

+1

和你有什么试过自己到目前为止? – 2013-03-14 11:50:54

+0

显示您尝试的代码并描述其无法按预期工作的方式很有帮助。另外,你提出这个问题的方式听起来像是你要求做家庭作业的答案。帮助功课没问题,但答案不是。 – dsh 2013-03-14 11:53:29

回答

0

也许我们会找到一个更好的办法,但

list1 = [0,562,256,0,0,856] 
list2 = [265,0,265,0,874,958] 
rest1 = [] 
rest2 = [] 
result1 = [] 
result2 = [] 
for i in range(len(list1)): 
if list1[i] and list2[i]: 
    rest1.append(list1[i]) 
     rest2.append(list2[i]) 
for i in range(len(rest1)): 
if rest1[i] >249 and rest2[i]>249: 
     result1.append(rest1[i]) 
    result2.append(rest2[i]) 
print(result1,result1) 
+0

如果你删除第一个循环它仍然有效,但它是一个很好的解决方案,我认为! – user2169610 2013-03-14 12:46:45

+0

谢谢你的感谢。我做了第一个循环,因为你说过“如果在索引处两个列表都有一个不同于0的数字,那么这个数字应该保存在一个列表中。” – 2013-03-14 12:49:02

3

使用zip()配成对每个列表的元素:!

listA = [0,562,256,0,0,856] 
listB = [265,0,265,0,874,958] 

combined = zip(listA, listB) 
resultA = [a for a, b in combined if a and b] 
resultB = [b for a, b in combined if a and b] 

给出:

>>> resultA 
[256, 856] 
>>> resultB 
[265, 958] 

你也可以先用filter()删除所有对其中一个或另一个元素是0:

combined = filter(lambda (a, b): (a and b), zip(listA, listB)) 
resultA = [a for a, b in combined] 
resultB = [b for a, b in combined]