2016-03-31 16 views
0

İki Boole dizisiyle veri kümem var.Python'da başka bir Boole Dizisi ile bir Boole Dizisi Dizini Oluşturma

İlk boole dizisi, hangi veri noktalarının bunlara eklenmiş bir hata verdiğini ve bir MCMC yordamında hatayı açıp açmayacağını belirtmek için kullanılır. İkinci dizi, her veri noktasının ölçülen bir uzunluğa sahip olup olmadığını gösterir.

Nasıl I endeksi Has_length dizisi ile Boolean_error dizi, ben Boolean_error == True veya Boolean_error == False biriyle Has_length == True ile nesnelerin oluşan bir liste olacak öyle mi?

İşte yapmak istediğim şey bir örnek:

Boolean_error = [False True False True True False True False False False False False] 
Has_length = [True True True True False True True True True True True False] 

print Boolean_error[Has_length] 

>>> [False True False True False True False False False False] 
+1

Tam olarak ne istiyorsun nedir? anlamıyorum – Milor123

+0

Virgülleri kaçırıyor musunuz? –

+0

python'un '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '(dizileri vardır, fakat sıra dışıdır) olduğunu not eder. Ayrıca, bu geçerli değil Python –

cevap

2

İşte başlıyorsunuz. Bu tam olarak ihtiyacın olanı yapar.

errors_with_length = [b for b, l in zip(Boolean_error, Has_length) if l] 

zip() işlevi her iterable her zaman 1 değerini alır ve liste anlama yanlış Has_length filtreler ve True olanlar için Boolean_error sürer.


Başka, daha verimli bir yaklaşım şöyle itertools.compress() kullanmak olacaktır:

>>> list(itertools.compress(Boolean_error, Has_length)) 
[False, True, False, True, False, True, False, False, False, False] 
+0

Bu, ihtiyacım olan şey için mükemmel çalışıyor. Teşekkür ederim! – morepenguins

0

Sadece bunu yapmak için bir fonksiyon yazabiliriz.

def return_list_with_only_known_length(error, length): 
    output = [] 
    for i, b in enumerate(length): 
     if b: 
      output.append(error[i]) 
    return output 
+0

Uzun ve karmaşık bir eş. Cevabınızı düzenledikçe biraz daha düzenli olacak, ancak daha kolay bir cevap var. – Bharel