Найти - Пользователи
Полная версия: Как найти длину в списке
Начало » Python для новичков » Как найти длину в списке
1 2 3
Kogrom
Ну и для полноты картины:
def calc_recursion(number, res = 0):
if not number: return res
else: return calc_recursion(number // 10, res + number % 10)
Тут у меня вышло 3.3, то есть примерно 2-е место. Я ожидал худшего.
Isem
Варианты с // и % начинают сильно отставать, как только количество цифр в числе увеличивается
Kogrom
Isem
Варианты с // и % начинают сильно отставать, как только количество цифр в числе увеличивается
Есть такое, но только при варианте с ord, а не с int и знаков должно быть больше 10 (по моим экспериментам).
Isem
Ну цифры говорят сами за себя:
def map_int(n):
return sum(map(int, str(n)))

def map_ord(n):
s = str(n)
return sum(map(ord, s)) - len(s)*ord('0')

def calc_numbers1(number):
res = 0
divisor = 1
while divisor < number:
res += (number % (divisor*10)) // (divisor)
divisor *= 10
return res

def calc_numbers2(number):
res = 0
while number:
res += number % 10
number //= 10
return res


for f in map_int,map_ord,calc_numbers1,calc_numbers2:
n = 123456789
start = time()
for i in range(100000):
s = f(n)
print( "time spent for {0} = {1} sec".format( f.__name__, time() - start ))
для n=123456789:

time spent for map_int = 1.187000036239624 sec
time spent for map_ord = 0.26799988746643066 sec
time spent for calc_numbers1 = 0.6729998588562012 sec
time spent for calc_numbers2 = 0.3560001850128174 sec


для n=12345678901234567890:

time spent for map_int = 2.4769999980926514 sec
time spent for map_ord = 0.4119999408721924 sec
time spent for calc_numbers1 = 1.8000001907348633 sec
time spent for calc_numbers2 = 0.8689999580383301 sec

Используется Python 3.2
breidos
Посоветуйте, как сделать такое:
Вывести все целые числа от 1 до 100, которые делятся на сумму своих цифр без остатка.
Пишу так, а он ругается :(
n=list(range(10))
print sum(map(int, str(n))),
ПС. Спасибо всем за ответы. Жаль + ставить некуда.
maxwell
breidos,
1. str(n) — это по вашему что?
2. Для начала составьте алгоритм действий. Словами или диаграммами на бумажке, не важно, главное четко понимать КАК вы собираетесь выполнить задачу.

Кстати, может я чего не знаю, но зачем писать n=list(range(10))?
Или в какой-то версии питона xrange заменили на range и теперь range не возвращает list?

P.S. И впредь, насколько я понял правила форума, для новой задачи начинайте новую тему.
py.user.next
maxwell
Или в какой-то версии питона xrange заменили на range
у него код для второго питона, там ещё list
а в третьем питоне нет xrange

>>> xrange
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'xrange' is not defined
>>> range(10)
range(0, 10)
>>>
hellslade
breidos
Пишу так, а он ругается
Всем, конечно, итак понятно как ОН ругается, но не мешало бы привести текст ошибки и ваше мнение почему так произошло.
И послушайте maxwell, распишите алгоритм на бумажке – подробней распишите действия, которые должна выполнять программа, потом начинайте писать код, глядишь и помощь форума не понадобится :)
breidos
print sum(map(int, str(n))),
Судя по этому, вам не мешало бы для начала книжку по питону для начинающих почитать – узнать, что такое str, int, map, sum и т.д. А то из предыдущих примеров выдернули кусок кода наобум и думаете он будет работать. Чтобы вам помогли, вы должны сами искать решение.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB