关于python:将字符串切成列表

Slicing a string into a list

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do you split a list into evenly sized chunks in Python?
What is the most"pythonic" way to iterate over a list in chunks?

说我有根线

1
s = '1234567890ABCDEF'

如何分割(或者拆分是正确的术语?)把这个字符串放到一个列表中,每个字符串包含2个字符?

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

不确定这是否相关,但我正在分析一个十六进制字符字符串,我需要的最终结果是从上面的列表中创建的字节列表(例如,通过使用int(desired_result[i], 16))


1
2
3>> bytes.fromhex('1234567890ABCDEF')
b'\x124Vx\x90\xab\xcd\xef'


1
2
3
4
5
>>> s = '1234567890ABCDEF'
>>> iter_s = iter(s)
>>> [a + next(iter_s) for a in iter_s]
['12', '34', '56', '78', '90', 'AB', 'CD', 'EF']
>>>


您可以使用binascii

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

然后:

1
2
>>> list(_)
['\x12', '4', 'V', 'x', '\x90', '\xab', '\xcd', '\xef']

1
2
3
>>> s = '1234567890ABCDEF'
>>> [char0+char1 for (char0, char1) in zip(s[::2], s[1::2])]
['12', '34', '56', '78', '90', 'AB', 'CD', 'EF']

但是,正如其他人所指出的,对于将十六进制数转换为字节这一更普遍的问题,有更直接的解决方案。另外请注意,罗伯特·金的解决方案通常更有效,因为它基本上没有内存占用(代价是代码不太清晰)。