0

可能重复:
如何在 Python 中将列表拆分为大小均匀的块?
以块为单位迭代列表的最“pythonic”方式是什么?

说我有一个字符串

s = '1234567890ABCDEF'

我怎样才能将这个字符串切片(或者拆分是正确的术语?)这个字符串由每个包含 2 个字符的字符串组成的列表?

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

不确定这是否相关,但我正在解析一串十六进制字符,我需要的最终结果是从上面的列表创建的字节列表(例如,通过使用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

你可以使用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 回答
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 回答
0
>>> s = '1234567890ABCDEF'
>>> [char0+char1 for (char0, char1) in zip(s[::2], s[1::2])]
['12', '34', '56', '78', '90', 'AB', 'CD', 'EF']

但是,正如其他人所指出的,对于将十六进制数转换为字节的更普遍的问题,有更直接的解决方案。另请注意,Robert Kings 的解决方案通常更有效,因为它基本上具有零内存占用(以不那么易读的代码为代价)。

于 2013-01-01T03:21:08.053 回答