Получи половину поплавка в питоне - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть список больших целых чисел, 10 digits(list = [1010101010, 1111000110,1111000111,1111000101]...).Я хочу сгруппировать их 2 на 2 и разрезать каждый пополам.Например, я должен сгруппировать list[0] со списком [1], а затем разделить каждый пополам.первая половина list[0]+last половина list[1] будет номером, который я хочу сохранить и использовать позже.Как мне разделить целые числа пополам и заставить работать только половину?Мне удалось сгруппировать элементы по 2, но я не знаю, как их разделить и объединить.

 n = 2
 out = [list[k:k+n] for k in range(0,len(list),n)]

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Вы можете преобразовать int в строку, а затем нарезать:

lst = [1010101010, 1111000110, 1111000111, 1111000101]
out = [lst[k:k+2] for k in range(0,len(lst), 2)]

result = [int(str(first)[:5] + str(second)[5:]) for first, second in out]
print(result)

Выход

[1010100110, 1111000101]

ОБНОВЛЕНИЕ

Если входные данные являются массивами numpy, это следует сделать следующим образом:

import numpy as np
np.random.seed(42)

lst = np.random.randint(2, size=(50, 10))
out = [lst[k:k+2] for k in range(0,len(lst), 2)]
result = [int(''.join(map(str,  first[:5].tolist() + second[5:].tolist()))) for first, second in out]
print(result)

Выход

[100001110, 1011101000, 11111000, 11101, 101011110, 111110110, 1010000000, 1011110101, 11110000, 10011100, 100101010, 11111101, 1010000110, 100010101, 1110111001, 1110001, 1011110011, 101001100, 1001011010, 1110011110, 1100100111, 1110111100, 101101100, 1010110101, 1101000101]

Обратите внимание, что это решение удаляет ведущие нули путем преобразованиязначения в int.

0 голосов
/ 01 декабря 2018
n = 2
out = [sum([kk/2 for kk in list[k:k+n]]) for k in range(0,len(list),n)]
...