python:将16个元素的列表处理成8个元素的列表

时间:2010-01-25 20:38:44

标签: python list

我有16个元素[a00,a01,a02,...,a15]的列表,想要计算一个列表[b0,b1,b2,b3,b4,b5,b6,b7]其中

b0 = a00*256+a01
b1 = a02*256+a03
b2 = a04*256+a05
(etc.)

最简单的方法是什么? (我是python的初学者)

5 个答案:

答案 0 :(得分:4)

b_list = [a_list[2*i] * 256 + a_list[2*i+1] for i in range(8)]

请注意,这仅适用于包含16个元素的情况。

更通用的解决方案是:

b_list = [a_list[2*i] * 256 + a_list[2*i+1] for i in range(len(a_list) / 2)]

只要a_list具有偶数个元素。

答案 1 :(得分:4)

不要太高尔夫,但如果你想避免下标地狱,你可以使用这个方便的zip成语:

a = range(16)
b = [x*256+y for x,y in zip(*[iter(a)]*2)]

答案 2 :(得分:2)

你可以制作一份理解清单......

a = [a00, a01,.... ]
#Readed, take a list with 0,2,4... len(a) [15, will stop at 14]
# then make a[i]*256 + a[i+1], so
# a[0]*256+a[1], a[2]*256+a[3], ... a[14]*256+a[15]
b = [ a[i]*256+a[i+1] for i in range(0,len(a),2) ]

答案 3 :(得分:2)

lst = [a01, a02, ... ]
result = [256 * a + b for a, b in zip(lst[::2], lst[1::2])]

这避免了range的单声道使用。

答案 4 :(得分:1)

首先想到的是:

>>> a=range(16)
>>> b=[a[i]*256+a[i+1] for i in range(0,len(a),+2)]
[1, 515, 1029, 1543, 2057, 2571, 3085, 3599]