2010-04-14 20 views
5

Come faccio a convertire questo:convertire un elenco di booleani a stringa

[True, True, False, True, True, False, True] 

In questa:

'AB DE G' 

Nota: C ed F sono mancanti nelle stampe a causa delle corrispondenti voci in ingresso la lista è falsa.

risposta

10

Assumendo tua lista di booleani non è troppo lungo:

bools = [True, True, False, True, True, False, True] 

print ''.join(chr(ord('A') + i) if b else ' ' for i, b in enumerate(bools)) 
+1

È possibile sostituire 65 con ord ('A') – compie

+0

Sì, ord ('A') è più chiara. Cambierà. –

+0

+1 Nizza. :) –

3
In [1]: ''.join(map(lambda b, c: c if b else ' ', 
        [True, True, False, True, True, False, True], 
        'ABCDEFG')) 
Out[1]: 'AB DE G' 
2
inputs = [True, True, False, True, True, False, True] 
outputs = [] 
for i,b in enumerate(inputs): 
    if b: 
    outputs.append(chr(65+i)) # 65 = ord('A') 
    else: 
    outputs.append(' ') 
outputstring = ''.join(outputs) 

o la lista di comprensione versione

inputs = [True, True, False, True, True, False, True] 
outputstring = ''.join(chr(65+i) if b else ' ' for i,b in enumerate(inputs)) 
+0

Preferirei enumerare (...) piuttosto che range (len (...)). –

+0

Inoltre, 97 -> 65 per lettere maiuscole :) –

+0

Hai ragione, è tardi e mi è sfuggito di mente. Ho revisionato il mio, ma ho anche svalutato il tuo. :) – Amber

9

È possibile utilizzare al posto di string.uppercase chr/ord. Questo ti darà risultati dipendenti dalla localizzazione. Per ascii puoi usare string.ascii_uppercase.

>>> import string 
>>> bools = [True, True, False, True, True, False, True] 
>>> ''.join(string.uppercase[i] if b else ' ' for i, b in enumerate(bools)) 

'AB DE G' 
+1

+1 per 'string.uppercase' –

+0

@miles: non è necessario il list comprehension – SilentGhost

+0

@SilentGhost: hai ragione, è ridondante. L'ho rimosso adesso, grazie. – miles82

0

soluzione Qui sta generalizzata sulla base di numpy.where():

#!/usr/bin/env python 
import string, itertools 

def where(selectors, x, y): 
    return (xx if s else yy for xx, yy, s in itertools.izip(x, y, selectors)) 

condition = [True, True, False, True, True, False, True] 
print ''.join(where(condition, string.uppercase, itertools.cycle(' '))) 
# -> AB DE G 

import numpy as np 
print ''.join(np.where(condition, list(string.uppercase)[:len(condition)], ' ')) 
# -> AB DE G 
Problemi correlati