Python - 比较两个列表并返回两个列表中存在的大于零的值

时间:2017-03-02 08:52:36

标签: python list

我有两个清单:

a= [4,5,4,0,1,0]
b= [0,4,4,0,0,0]

如何基于两个列表中的索引生成其值大于零的子列表。例如,

sub_list_a =[5,4]
sub_list_b = [4,4]

以下代码生成子列表。我想知道是否有一种优雅的方式来做这件事。

idxa = [i for i, e in enumerate(a) if e != 0]
idxb = [i for i, e in enumerate(b) if e != 0]

inter = list(set(idxa) & set(idxb))
from operator import itemgetter 
print ('sub_list_a',itemgetter(*inter)(a))
print ('sub_list_a',itemgetter(*inter)(b))

4 个答案:

答案 0 :(得分:3)

您可以zip这两个列表并检查这两个元素是app.get('/all',sendAll); function sendAll(request,response){ response.send(words); } ,然后再检查> 0以将这些对分配到两个子列表

zip

如果数字不能为>>> a= [4, 5, 4, 0, 1, 0] >>> b= [0, 4, 4, 0, 0, 0] >>> pairs = [(x, y) for (x, y) in zip(a, b) if x > 0 and y > 0] >>> sub_list_a, sub_list_b = zip(*pairs) >>> sub_list_a, sub_list_b ((5, 4), (4, 4)) ,那么您也可以filter all {};

< 0

请注意,子列表是元组;如果您需要列表map>>> pairs = filter(all, zip(a, b)) >>> sub_list_a, sub_list_b = zip(*pairs) >>> sub_list_a, sub_list_b ((5, 4), (4, 4))

list

当然,您也可以在一行中完成上述所有操作:

>>> sub_list_a, sub_list_b = map(list, zip(*pairs))
>>> sub_list_a, sub_list_b
([5, 4], [4, 4])

答案 1 :(得分:0)

使用列表理解:

>>> sub_a = [a[i] for i in range(0, len(a)) if a[i] > 0 and b[i] > 0]

>>> sub_b = [b[i] for i in range(0, len(b)) if a[i] > 0 and b[i] > 0]

>>> sub_a
[5, 4]

>>> sub_b
[4, 4]

答案 2 :(得分:0)

如果您对for循环更熟悉,假设列表长度相同:

a = [4,5,4,0,1,0]
b = [0,4,4,0,0,0]

def sub_list(l_1, l_2):
  sublist = []
  for idx, val in enumerate(l_1):
    if val > 0 and l_2[idx] !=0:
      sublist.append(val)
  return sublist

print(sub_list(a,b)) #[5, 4]
print(sub_list(b,a)) #[4, 4]

答案 3 :(得分:0)

import numpy

a= [4,5,4,0,1,0]
b= [0,4,4,0,0,0]
# get all nonzeros index
sub_a = numpy.nonzero(a)[0]  # [0 1 2 4]
sub_b = numpy.nonzero(b)[0]  # [1,2]
# find intersection
intersect = numpy.intersect1d(sub_a, sub_b) # [1,2]
# a and b index, based on intersection
result = [[a[o], b[o]] for o in intersect]
print (result)

[[5, 4], [4, 4]]