从数组的任意长度连续获取数组的固定长度

时间:2019-07-07 15:12:24

标签: python arrays hash bitwise-operators

早上好,我试图做夸克哈希计算,并且我与海绵结构混淆了,特别是在吸收阶段,我有一个数组,长度为8的倍数,我想取前8个值从数组中进行计算,然后再取8进行计算。

让我说我有这个数组

array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 

我想将[0,1,2,3,4,5,6,7]与[0,0,0,0,0,0,0,0,0]进行异或,然后再获取另一个数组[8,9,10,11,12,13,14,15]将其与其他计算的值进行XOR运算,依此类推。

我的问题是如何取8个数组的值?

谢谢你们

2 个答案:

答案 0 :(得分:0)

In the documentation for itertools,有一个您可以复制的食谱叫做“石斑鱼”。这将返回一个迭代器,该迭代器以任意大小的块返回您的列表

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

答案 1 :(得分:0)

在python中,您可以使用以下语法对列表进行切片:

array[start: end]

您可以使用for循环以8为增量循环访问列表,获取所有块。例如:

array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] 
for counter in range(0,len(array), 8):
    subarray = array[counter:counter+8]
    print(subarray)