0

バイナリコードの長いストレッチがあります。たとえば、指定されたストレッチで 1 の位置を計算するにはどうすればよいですか?たとえば、以下に示す 2 つのストレッチがあります。

seq1 = 10000000000000000000010000000000000000000010000000000000000000010000000000000000
       |                    |                    |                    |
       1                    22                   42                   58

seq2 = 10000000000000000000001000000000000000000001000000000000000000001000000000000000
       |                     |                    |                    |
       1                    23                    43                  59

最初のシーケンスの出力は次のようになります。

seq1 1:1 1:22 1:42 1:58

2 番目のシーケンスの場合:

seq2 2:1 2:23 2:43 2:59
4

1 に答える 1

3

これで始められるはずです。

>>> s='10000000000000000000010000000000000000000010000000000000000000010000000000000000'
>>> [i+1 for i,ch in enumerate(s) if ch=='1']
[1, 22, 43, 64]
>>> 

残りが必要な場合は、次のとおりです。

def convertSeq(s, index):
    result = [i+1 for i,ch in enumerate(s) if ch=='1']
    result = ' '.join([str(index)+':'+str(i) for i in result])
    result = 'seq'+str(index)+' '+result
    return result

seq1 = '10000000000000000000010000000000000000000010000000000000000000010000000000000000'
seq2 = '10000000000000000000001000000000000000000001000000000000000000001000000000000000'

print convertSeq(seq1, 1)
print convertSeq(seq2, 2)

または、ワンライナーを好む場合:

def convertSeq(s, index):
    return 'seq{} {}'.format(
               index,
               ' '.join('{}:{}'.format(index, i+1)
                        for i,ch in enumerate(s)
                        if ch == '1'))
于 2013-10-18T14:45:34.270 に答える