Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert a list of booleans to string

Tags:

python

How do I convert this:

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

Into this:

'AB DE G'

Note: C and F are missing in the output because the corresponding items in the input list are False.

like image 272
compie Avatar asked Apr 14 '10 08:04

compie


4 Answers

Assuming your list of booleans is not too long:

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

print ''.join(chr(ord('A') + i) if b else ' ' for i, b in enumerate(bools))
like image 61
Gary Kerr Avatar answered Oct 08 '22 03:10

Gary Kerr


You can use string.uppercase instead of chr/ord. This will give you locale-dependent results. For ascii you can use 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'
like image 24
miles82 Avatar answered Oct 08 '22 02:10

miles82


In [1]: ''.join(map(lambda b, c: c if b else ' ',
                    [True, True, False, True, True, False, True],
                    'ABCDEFG'))
Out[1]: 'AB DE G'
like image 31
Michał Marczyk Avatar answered Oct 08 '22 02:10

Michał Marczyk


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)

or the list comprehension version

inputs = [True, True, False, True, True, False, True]
outputstring = ''.join(chr(65+i) if b else ' ' for i,b in enumerate(inputs))
like image 24
Amber Avatar answered Oct 08 '22 03:10

Amber