2010-04-14 9 views

Antwort

10

Liste der booleans Unter der Annahme, nicht zu lang ist:

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

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

Sie können 65 ersetzen mit ord ('A') – compie

+0

Ja, ord ('A') ist klarer. Wird sich verändern. –

+0

+1 Schöne. :) –

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) 

oder die Liste Verständnis Version

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

Ich würde lieber aufzählen (...) als im Bereich (len (...)). –

+0

Auch 97 -> 65 für Großbuchstaben :) –

+0

Sie haben Recht, es ist spät und es ist mir in den Sinn gekommen. Ich habe meine Version überarbeitet, aber ich habe auch deine Version aktualisiert. :) – Amber

9

können Sie verwenden string.uppercase statt chr/ord. Dadurch erhalten Sie länderspezifische Ergebnisse. Für ascii können Sie string.ascii_uppercase verwenden.

>>> 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 für 'string.uppercase' –

+0

@miles: Sie benötigen keine Listenverständnis – SilentGhost

+0

@SilentGhost: Sie haben Recht, es ist redundant. Ich habe es jetzt entfernt, danke. – miles82

0

Hier ist verallgemeinerte Lösung auf Basis von 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 
Verwandte Themen