python: обработка списка из 16 элементов в список из 8 элементов - PullRequest
1 голос
/ 25 января 2010

У меня есть список из 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.)

Какой самый простой способ сделать это? (Я новичок в питоне)

Ответы [ 5 ]

4 голосов
/ 25 января 2010

Не для того, чтобы играть в гольф, но если вы хотите избежать адского индекса, вы можете использовать эту удобную zip идиому:

a = range(16)
b = [x*256+y for x,y in zip(*[iter(a)]*2)]
4 голосов
/ 25 января 2010

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

Обратите внимание, что это работает, только если a имеет 16 элементов.

Более общее решение будет:

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

, если a_list имеет четное количество элементов.

2 голосов
/ 25 января 2010
lst = [a01, a02, ... ]
result = [256 * a + b for a, b in zip(lst[::2], lst[1::2])]

Это позволяет избежать бессмысленного использования range.

2 голосов
/ 25 января 2010

Вы можете составить список понимания ...

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) ]
1 голос
/ 25 января 2010

Первое, что приходит на ум:

>>> 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...