4

次のような長いリストがあります。

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

タイル マップで壁を表します。長さが 4 の倍数であるとは限りませんが、最後にパディングされても問題ありません。

これを 16 進文字列に変換したいので、上記の例では E で始まります...

(Python 2.7.3 を使用して) これを行うための素敵なエレガントな方法があることを願っていました!

ありがとう。

編集済み

これは 9x9 マップの例です。

map = [True, True, True, True,
       True, True, True, True, 
       True, True, True, True, 
       True, False, False, True, 
       True, True, True, True, 
       True, False, False, False, 
       False, True, True, True, 
       True, True, False, False, 
       False, False, True, True, 
       True, True, True, True, 
       False, False, True, True, 
       True, True, True, True, 
       True, True, True, True, 
       True, True, True, True, 
       True, True, True, True, 
       True, True, True, True, 
       True, True, True, True, 
       True, True, True, True, 
       True, True, True, True, 
       True, True, True, True, 
       True]# False, False, False padded

私がしたいことはできることです

str = heximify(map)
print str
> FFF9F87C3F3FFFFFFFFF8
4

4 に答える 4

4
>>> walls = [True, True, True, False]
>>> hex(int(''.join([str(int(b)) for b in walls]), 2))
'0xe'

または(@millimooseの回答に触発された)、

>>> hex(sum(b<<i for i,b in enumerate(reversed(walls))))
'0xe'
于 2013-07-18T19:10:35.833 に答える
2
walls = [True, True, True, False, ... ]
val = 0
for w in walls:
    val *= 16
    val += int(w)
val = hex(val) 

または汚いワンライナー:

val = hex(sum(i*16**pow for i,pow in zip((int(w) for w in walls),range(len(walls))[::-1])))
于 2013-07-18T19:05:12.520 に答える
0
>>> hex(int("".join(["%d"%s for s in [True,True,True,False]]),2))
'0xe'
于 2013-07-18T19:12:41.903 に答える