Эффективный способ преобразовать строки из разделения функционирует к ints в Python

Ваш метод вернет переменную локального стека, которая будет терпеть неудачу. Чтобы вернуть массив, создайте его вне функции, передайте его по адресу в функцию, затем измените его или создайте массив в куче и верните эту переменную. Оба будут работать, но первый не требует никакого динамического распределения памяти, чтобы заставить его работать правильно.

void returnArray(int size, char *retArray)
{
  // work directly with retArray or memcpy into it from elsewhere like
  // memcpy(retArray, localArray, size); 
}

#define ARRAY_SIZE 20

int main(void)
{
  char foo[ARRAY_SIZE];
  returnArray(ARRAY_SIZE, foo);
}
29
задан blcArmadillo 15 October 2009 в 19:59
поделиться

4 ответа

Мое первоначальное предложение с пониманием списка.

test = '8743-12083-15'
lst_int = [int(x) for x in test.split("-")]

РЕДАКТИРОВАТЬ:

Что является наиболее эффективным (по циклу ЦП) - это то, что всегда следует проверять. Некоторое быстрое тестирование моей установки Python 2.6 показывает, что map , вероятно, является наиболее эффективным кандидатом здесь (создание списка целых чисел из строки с разделением значений). Обратите внимание, что разница настолько мала, что на самом деле это не имеет значения, пока вы не сделаете это миллионы раз (и это доказанное узкое место) ...

def v1():
 return [int(x) for x in '8743-12083-15'.split('-')]

def v2():
 return map(int, '8743-12083-15'.split('-'))

import timeit
print "v1", timeit.Timer('v1()', 'from __main__ import v1').timeit(500000)
print "v2", timeit.Timer('v2()', 'from __main__ import v2').timeit(500000)

> output v1 3.73336911201 
> output v2 3.44717001915
62
ответ дан 28 November 2019 в 00:45
поделиться

Вы можете map использовать функцию int для каждой подстроки или использовать понимание списка :

>>> file = '8743-12083-15'
>>> list(map(int, file.split('-')))
[8743, 12083, 15]
>>> [int(d) for d in file.split('-')]
[8743, 12083, 15]

В приведенном выше вызове list не требуется, если только вы не работаете с Python 3.x. (В Python 2.x map возвращает список, в Python 3.x он возвращает генератор.)

Также возможно непосредственное присвоение трем переменным (в этом случае выражение генератора вместо составления списка сделаю):

>>> xval, yval, zval = (int(d) for d in file.split('-'))
>>> xval, yval, zval
(8743, 12083, 15)
10
ответ дан Stephan202 11 October 2019 в 14:41
поделиться

эффективнее, чем меньше строк кода?

(xval,yval,zval) = [int(s) for s in file.split('-')]
14
ответ дан 28 November 2019 в 00:45
поделиться

примечание: вы можете выбрать другое имя для файла , поскольку оно затеняет buildtin

это работает в Python 2 и 3


xval,yval,zval = map(int,file.split('-'))
8
ответ дан 28 November 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: