「01110000」というバイナリ文字列があり、forloop を記述せずに先頭のゼロの数を返したいと考えています。誰もそれを行う方法について何か考えがありますか? できれば、文字列がすぐに「1」で始まる場合にも 0 を返す方法
9799 次
8 に答える
11
それが「バイナリ文字列」であると本当に確信している場合:
input = '01110000'
zeroes = input.index('1')
更新:「先頭の」ゼロしかないと壊れます
すべてゼロのケースを処理する代替形式。
zeroes = (input+'1').index('1')
于 2013-01-24T20:21:28.863 に答える
9
簡単なワンライナー:
x = '01110000'
leading_zeros = len(x.split('1', 1)[0])
これにより、文字列が最初の '1' までのすべてとその後の残りの部分に分割され、プレフィックスの長さがカウントされます。の 2 番目の引数split
は単なる最適化であり、実行する分割の数を表します。つまり、すべてのオカレンスで分割するのではなく、最初の '1' を見つけた後に関数が停止します。x.split('1')[0]
パフォーマンスが問題にならない場合にのみ使用できます。
于 2013-01-24T20:20:52.437 に答える
8
別の方法は次のとおりです。
In [36]: s = '01110000'
In [37]: len(s) - len(s.lstrip('0'))
Out[37]: 1
他のソリューションとは異なり、最初の1
. これにより、もう少し一般的になりますが、特定の問題は問題ではありません。
于 2013-01-24T20:22:54.203 に答える
3
私は使用します:
s = '00001010'
sum(1 for _ in itertools.takewhile('0'.__eq__, s))
むしろpythonicで、空の文字列や非バイナリ文字列など、一般的なケースで機能し、任意の長さの文字列(またはイテレータ)を処理できます。
于 2014-04-12T10:04:32.387 に答える
3
0 または 1 だけであることがわかっている場合:
x.find(1)
(すべてゼロの場合は -1 を返します。その動作が必要な場合とそうでない場合があります)
于 2013-01-24T20:21:58.297 に答える
0
re
モジュールはどうですか?
a = re.search('(?!0)', data)
次にa.start()
ポジションです。
于 2016-03-25T08:30:44.060 に答える