Я бы посоветовал вводить ваши данные командой, используя Map
. Таким образом, вы можете построить свои данные с помощью цикла forEach
с линейной сложностью времени:
const rounds = [{team: "Dropkick Murphies",score: 75,course: 17},{team: "Dropkick Murphies",score: 62,course: 24},{team: "Dropkick Murphies",score: 69,course: 26},{team: "Gigantic",score: 67,course: 26},{team: "Gigantic",score: 65,course: 17},{team: "Gigantic",score: 63,course: 24}];
// Create Map with one entry per team
const map = new Map(rounds.map(({team}) => [team, []]));
// Populate each team with their scores
rounds.forEach(({team,score,course}) => map.get(team).push({score,course}));
// Convert the Map to the desired data structure
const result = Array.from(map, ([team, rounds]) => ({team, rounds}));
console.log(result);
Вы хотите модуль структуры.
packed = struct.pack('l', 123456)
assert struct.unpack('l', packed)[0] == 123456
Как насчет
from binascii import hexlify, unhexlify
def xstr(x):
hex = '%x' % x
return unhexlify('0'*(len(hex)%2) + hex)[::-1]
def xlong(s):
return int(hexlify(s[::-1]), 16)
Я не сделал времени это, но это должно быть быстрее и также работать над большим числом, так как это не использует рекурсию.
Я предполагаю, что Вы не заботитесь о формате строки, Вы просто хотите сериализацию? Если так, почему бы не использовать встроенный сериализатор Python, cPickle модуль? dumps
функция преобразует любой объект Python включая длинное целое к строке, и loads
функция является своей инверсией. Если Вы делаете это для сохранения в файл, проверяете dump
и load
функции, также.
>>> import cPickle
>>> print cPickle.loads(cPickle.dumps(13**666)) % 666
73
>>> print (13**666) % 666
73
На самом деле у меня есть отсутствие длинных (s, 256). Я скрываюсь больше и вижу, что существует 2 функции в Python файл CAPI "longobject.h":
PyObject * _PyLong_FromByteArray( const unsigned char* bytes, size_t n, int little_endian, int is_signed);
int _PyLong_AsByteArray(PyLongObject* v, unsigned char* bytes, size_t n, int little_endian, int is_signed);
Они делают задание. Я не знаю, почему там не включены в некоторый модуль Python или исправляют меня если I'am неправильно.
Если Вам нужен быстрый маршал использования сериализации модуль. Это вокруг 400x быстрее, чем Ваши методы.
Производительность cPickle
по сравнению с. marshal
(Python 2.5.2, Windows):
python -mtimeit -s"from cPickle import loads,dumps;d=13**666" "loads(dumps(d))"
1000 loops, best of 3: 600 usec per loop
python -mtimeit -s"from marshal import loads,dumps;d=13**666" "loads(dumps(d))"
100000 loops, best of 3: 7.79 usec per loop
python -mtimeit -s"from pickle import loads,dumps;d= 13**666" "loads(dumps(d))"
1000 loops, best of 3: 644 usec per loop
marshal
намного быстрее.