2017-07-07 2 views
3
arbeiten

Ich möchte ein kartesisches Produkt erstellen und die Tupel aus der zweiten und dritten Position wählen, die gleich sind oder sich nur durch 1Lambda mit itertools jetzt

import itertools 

a = [(1,4), (2,2), (3,9),(7,4),(5,4)]; 

a1 = (list(itertools.product(*a))) 

print (a1) 
i=a1[1] 
k=a1[2] 


new_list = list(filter(lambda i,k: (i-k <= 1) , a1)) 
print (my_list) 

Aber Ergebnis ist

[(1, 2, 3, 7, 5), (1, 2, 3, 7, 4), (1, 2, 3, 4, 5), (1, 2, 3, 4, 4), (1, 2, 9, 7, 5), (1, 2, 9, 7, 4), (1, 2, 9, 4, 5), (1, 2, 9, 4, 4), (1, 2, 3, 7, 5), (1, 2, 3, 7, 4), (1, 2, 3, 4, 5), (1, 2, 3, 4, 4), (1, 2, 9, 7, 5), (1, 2, 9, 7, 4), (1, 2, 9, 4, 5), (1, 2, 9, 4, 4), (4, 2, 3, 7, 5), (4, 2, 3, 7, 4), (4, 2, 3, 4, 5), (4, 2, 3, 4, 4), (4, 2, 9, 7, 5), (4, 2, 9, 7, 4), (4, 2, 9, 4, 5), (4, 2, 9, 4, 4), (4, 2, 3, 7, 5), (4, 2, 3, 7, 4), (4, 2, 3, 4, 5), (4, 2, 3, 4, 4), (4, 2, 9, 7, 5), (4, 2, 9, 7, 4), (4, 2, 9, 4, 5), (4, 2, 9, 4, 4)] 


    new_list = list(filter(lambda i,k: (i-k <= 1) , a1)) 
TypeError: <lambda>() missing 1 required positional argument: 'k' 

Was stimmt nicht mit meinem Lambda?

+0

Sie setzen 'my_list' auf eine leere Liste und dann, dass Sie filtern. Wenn Sie mit nichts anfangen, ist es egal, was Sie herausfiltern, Sie werden immer noch nichts haben. –

Antwort

3
import itertools 
a =[(1,4),(2,2),(3,9),(7,4),(5,4)] 
b = itertools.product(*a) 
c = filter(lambda x: abs(x[1]-x[2])<=1, b) 
print(c) 

gibt (für die Sichtbarkeit bearbeitet)

[(1, 2, 3, 7, 5), 
(1, 2, 3, 7, 4), 
(1, 2, 3, 4, 5), 
(1, 2, 3, 4, 4), 
(1, 2, 3, 7, 5), 
(1, 2, 3, 7, 4), 
(1, 2, 3, 4, 5), 
(1, 2, 3, 4, 4), 
(4, 2, 3, 7, 5), 
(4, 2, 3, 7, 4), 
(4, 2, 3, 4, 5), 
(4, 2, 3, 4, 4), 
(4, 2, 3, 7, 5), 
(4, 2, 3, 7, 4), 
(4, 2, 3, 4, 5), 
(4, 2, 3, 4, 4)] 
Verwandte Themen