2017-03-02 5 views
-6

에 존재하는 0이 아닌 값을 반환파이썬 - 두 개의 목록을 비교하고 내가 두 개의 목록이 더 모두 목록

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)) 
+2

불분명 함. 'sub_list_b'는 왜 [4,5]입니까? '5'는 어디에서 왔습니까? –

+0

당신이 무엇을 요구하고 있는지 명확하지 않습니다. 당신은 더 구체적 일 수 있습니까? –

+0

확실히 첫 번째 목록에는 1이 있어야하고 두 번째 목록에는 1이 있어야합니다. 너 뭐 해봤 니? – Sayse

답변

3

당신은이 목록을 zip과 두 개의 하위 목록에 쌍을 배포 다시 다음, 두 요소가 > 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)) 

번호, 다음 할 수도 있습니다 만 filterall에 의해 < 0 할 수없는 경우 :

>>> pairs = filter(all, zip(a, b)) 
>>> sub_list_a, sub_list_b = zip(*pairs) 
>>> sub_list_a, sub_list_b 
((5, 4), (4, 4)) 

하위 목록은 튜플입니다. 당신이 목록, maplist해야하는 경우 : 물론

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

을, 당신은 또한 한 줄에 위의 모든 작업을 수행 할 수 있습니다

sub_list_a, sub_list_b = map(list, zip(*filter(all, zip(a, b)))) 
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] 
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] 
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]] 
관련 문제