Если вы хотите все возможные комбинации, вы можете использовать itertools.product
.
Первым шагом является перестановка всех возможных значений 'a', 'b', 'c' and 'd'
. Предполагая, что ваш список повторяется каждые 4 шага, вы можете поместить в словарь, для ясности, как:
l1 = {k: [e.get(k) for e in your_list][i::4] for i, k in enumerate(['a', 'b', 'c', 'd'])}
l1
>>
{'a': [32, 544, 42, 2145],
'b': [2541, 44, 655, 450],
'c': [530, 54, 459, 342],
'd': [55, 454, 665, 186]}
Затем:
from itertools import product
combinations = [c for c in product(*l1.values())]
combinations
>>[(32, 2541, 530, 55),
(32, 2541, 530, 454),
(32, 2541, 530, 665),
(32, 2541, 530, 186)
....
(2145, 450, 342, 186)] #256 combinations in this case (4**4)
Вот измененный @ʞɔıu
использование ответа @Jason S
'предложение.
from __future__ import with_statement
from hashlib import md5, sha1
filename = 'hash_one-pass.py'
hashes = md5(), sha1()
chunksize = max(4096, max(h.block_size for h in hashes))
with open(filename, 'rb') as f:
while True:
chunk = f.read(chunksize)
if not chunk:
break
for h in hashes:
h.update(chunk)
for h in hashes:
print h.name, h.hexdigest()
Что-то вроде этого, возможно?
>>> import hashlib
>>> hashes = (hashlib.md5(), hashlib.sha1())
>>> f = open('some_file', 'r')
>>> for line in f:
... for hash in hashes:
... hash.update(line)
...
>>> for hash in hashes:
... print hash.name, hash.hexdigest()
или цикл по f.read (1024) или что-то как этот для получения блоков фиксированной длины
Я не знаю Python, но я - знакомые вычисления хеша w/.
При обработке чтения файлов вручную просто читайте в одном блоке (256 байтов или 4 096 байтов или безотносительно) за один раз, и передайте каждый блок данных для обновления хеша каждого алгоритма. (необходимо будет инициализировать состояние вначале и завершить состояние в конце.)