是否可以在列表中拆分项目并动态生成新列表?
基本上我得到一个ushort的列表,并希望生成一个ubytes列表:
input = [1036, 1055, 26, 29787, 9, 4206, 41, 7, 1036, 8302, 130, 4, 268, 4206]
out = [4, 12, 4, 31, 0, 26, 116, 91, 0, 9, 16, 110, 0, 41, 0, 7, 4, 12, 32, 110, 0, 130, 0, 4, 1, 12, 16, 110]
我可以很容易地生成元组列表,但是如何删除元组并将它们合并到一个大列表中呢?
out_temp = [(x>>8, x&0xFF) for x in input]
最佳答案 你可以这样使用列表理解:
>>> in_ = [1036, 1055, 26, 29787, 9, 4206, 41, 7, 1036, 8302, 130, 4, 268, 4206]
>>> [y for x in in_ for y in (x >> 8, x & 0xff)]
[4, 12, 4, 31, 0, 26, 116, 91, 0, 9, 16, 110, 0, 41, 0, 7, 4, 12, 32, 110, 0, 130, 0, 4, 1, 12, 16, 110]
或使用itertools.chain.from_iterable
:
>>> import itertools
>>> list(itertools.chain.from_iterable((x >> 8, x & 0xff) for x in in_))
[4, 12, 4, 31, 0, 26, 116, 91, 0, 9, 16, 110, 0, 41, 0, 7, 4, 12, 32, 110, 0, 130, 0, 4, 1, 12, 16, 110]
顺便说一句,不要使用输入作为变量名.它阴影内置功能input
.