2016-01-16 13 views
13

[-4, -2, 1, 2, 5, 0] listesinden üç elemanlı tupl listesini, anlamalarını kullanarak ve sum([] == 0) koşulunu yerine getirip getirmediklerini kontrol etmeye çalışıyorum. Aşağıdaki kod çalışır. Ancak bu comprehensions ifade daha kolay, çok daha zarif bir yolu var gibi olması gerektiğidir hiç şüphe yoktur:Python'daki kavrayışları bir listeden örneklemeleri örnekleme

[ 
    (i, j, k) for i in [-4, -2, 1, 2, 5, 0] 
       for j in [-4, -2, 1, 2, 5, 0] 
       for k in [-4, -2, 1, 2, 5, 0] if sum([i, j, k]) == 0 
] 

Çıktı:

[(-4, 2, 2), (-2, 1, 1), (-2, 2, 0), (-2, 0, 2), (1, -2, 1), 
(1, 1, -2), (2, -4, 2), (2, -2, 0), (2, 2, -4), (2, 0, -2), 
(0, -2, 2), (0, 2, -2), (0, 0, 0)] 

soru (i, j, k) for i, j, k in [-4, -2, 1, 2, 5, 0] gibi bir ifadenin arıyor.

+0

tekrarı gib mi değerleri izin: liste üzerinde (demet içinde elemanların yani sayısı) döngü sayısını ayarlamak için repeat parametre ile? – Arman

cevap

19

Listenizdeki iç içe döngüleri gizlemek için itertools.product'u kullanabilirsiniz.

>>> import itertools 
>>> lst = [-4, -2, 1, 2, 5, 0] 
>>> [x for x in itertools.product(lst, repeat=3) if sum(x) == 0] 
[(-4, 2, 2), 
(-2, 1, 1), 
(-2, 2, 0), 
(-2, 0, 2), 
(1, -2, 1), 
(1, 1, -2), 
(2, -4, 2), 
(2, -2, 0), 
(2, 2, -4), 
(2, 0, -2), 
(0, -2, 2), 
(0, 2, -2), 
(0, 0, 0)]