我有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的初学者)
答案 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]