Ваш метод вернет переменную локального стека, которая будет терпеть неудачу. Чтобы вернуть массив, создайте его вне функции, передайте его по адресу в функцию, затем измените его или создайте массив в куче и верните эту переменную. Оба будут работать, но первый не требует никакого динамического распределения памяти, чтобы заставить его работать правильно.
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);
}
Мое первоначальное предложение с пониманием списка.
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
Вы можете 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)
эффективнее, чем меньше строк кода?
(xval,yval,zval) = [int(s) for s in file.split('-')]
примечание: вы можете выбрать другое имя для файла
, поскольку оно затеняет buildtin
это работает в Python 2 и 3
xval,yval,zval = map(int,file.split('-'))