0

重複の可能性:
Python でリストを均等なサイズのチャンクに分割するにはどうすればよいですか?
リストをチャンクで反復処理する最も「pythonic」な方法は何ですか?

文字列があるとします

s = '1234567890ABCDEF'

この文字列を、それぞれ 2 文字を含む文字列で構成されるリストにスライス (または分割が正しい用語でしょうか?) するにはどうすればよいですか?

desired_result = ['12', '34', '56', '78', '90', 'AB', 'CD', 'EF']

これが関連しているかどうかはわかりませんが、16 進文字の文字列を解析しています。必要な最終結果は、上記のリストから作成されたバイトのリストです (たとえば、を使用してint(desired_result[i], 16))

4

4 に答える 4

6
3>> bytes.fromhex('1234567890ABCDEF')
b'\x124Vx\x90\xab\xcd\xef'
于 2013-01-01T03:08:49.720 に答える
3
>>> s = '1234567890ABCDEF'
>>> iter_s = iter(s)
>>> [a + next(iter_s) for a in iter_s]
['12', '34', '56', '78', '90', 'AB', 'CD', 'EF']
>>>
于 2013-01-01T03:14:41.660 に答える
3

使用できますbinascii

>>> from binascii import unhexlify
>>> unhexlify(s)
'\x124Vx\x90\xab\xcd\xef'

それで:

>>> list(_)
['\x12', '4', 'V', 'x', '\x90', '\xab', '\xcd', '\xef']
于 2013-01-01T03:09:07.910 に答える
0
>>> s = '1234567890ABCDEF'
>>> [char0+char1 for (char0, char1) in zip(s[::2], s[1::2])]
['12', '34', '56', '78', '90', 'AB', 'CD', 'EF']

しかし、他の人が指摘したように、16 進数をバイトに変換するというより一般的な問題には、より直接的な解決策があります。また、Robert Kings のソリューションは、本質的にメモリ フットプリントがゼロであるため (読みにくいコードを犠牲にして)、一般的により効率的であることに注意してください。

于 2013-01-01T03:21:08.053 に答える