如何轉換這樣的:轉換布爾值的列表,以字符串
[True, True, False, True, True, False, True]
進入這個:
'AB DE G'
注:C和F缺少的輸出,因爲在輸入相應項目列表是假的。
如何轉換這樣的:轉換布爾值的列表,以字符串
[True, True, False, True, True, False, True]
進入這個:
'AB DE G'
注:C和F缺少的輸出,因爲在輸入相應項目列表是假的。
假設你的布爾值的列表不是太長:
bools = [True, True, False, True, True, False, True]
print ''.join(chr(ord('A') + i) if b else ' ' for i, b in enumerate(bools))
In [1]: ''.join(map(lambda b, c: c if b else ' ',
[True, True, False, True, True, False, True],
'ABCDEFG'))
Out[1]: 'AB DE G'
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))
我寧願列舉(...)而不是範圍(len(...))。 – 2010-04-14 08:50:58
另外,97 - > 65爲大寫字母:) – 2010-04-14 08:52:21
你是對的,它已經很晚了,它讓我的腦海裏滑了下來。我修改了我的,但我也贊成你的。 :) – Amber 2010-04-14 08:52:56
可以使用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'
+1 for'string.uppercase' – 2010-04-14 09:49:03
@miles:你不需要列表理解 – SilentGhost 2010-04-14 10:07:36
@SilentGhost:你是對的,它是多餘的。我已經刪除它,謝謝。 – miles82 2010-04-14 10:14:17
基於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
您可以替換65以ord( 'A') – compie 2010-04-14 09:04:51
是,ORD( 'A')更清晰。會改變。 – 2010-04-14 09:14:10
+1不錯的一個。 :) – 2010-04-14 12:04:56