преобразовать список логических значений в строку - PullRequest
5 голосов
/ 14 апреля 2010

Как мне конвертировать это:

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

В это:

'AB DE G'

Примечание: C и F отсутствуют в выходных данных, поскольку соответствующие элементы в списке ввода имеют значение False.

Ответы [ 5 ]

10 голосов
/ 14 апреля 2010

Если ваш список логических значений не слишком длинный:

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

print ''.join(chr(ord('A') + i) if b else ' ' for i, b in enumerate(bools))
9 голосов
/ 14 апреля 2010

Вы можете использовать string.uppercase вместо chr / ord. Это даст вам зависящие от локали результаты. Для ascii вы можете использовать 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'
3 голосов
/ 14 апреля 2010
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 голосов
/ 14 апреля 2010
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)

или версия для понимания списка

inputs = [True, True, False, True, True, False, True]
outputstring = ''.join(chr(65+i) if b else ' ' for i,b in enumerate(inputs))
0 голосов
/ 14 апреля 2010

Вот обобщенное решение, основанное на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...