Форум сайта python.su
Betonну оно поэтому и не получится если использовать строки таким образом. возьмем i == 10, в скобках получаем “10 ”, в список передается сначала “1”, затем “0”, потом “ ” и так десять раз.
ежели я правильно понимаю логику происходящего, сначала происходит сложение строк внутри скобок, каждое значение полученной строки передается в список последовательно i раз.
Да
Офлайн
Еще раз спасибо огромное, все получилось.
Вот итоговый код:
a = int(input()) res = [] for i in range(1, a+1): temp_list = [] temp_list += ([i] + ['']) * i res.extend(temp_list) s = res[:a*2] print(*s, sep = " ")
Офлайн
>>> import itertools >>> >>> def f(n): ... g = (i for i in range(n + 1) for _ in range(i)) ... return itertools.islice(g, n) ... >>> print(*f(7)) 1 2 2 3 3 3 4 >>>
Отредактировано py.user.next (Дек. 21, 2015 02:22:05)
Офлайн
Betonя уверен, что умение решать подобные задачи без списков очень им пригодится в дальнейшей деятельности.
зы. Некоторые смогли решить задачу без списков, только циклами. Ну да ладно
Офлайн
py.user.nextpy.user.next, спасибо. Общий принцип понятен, хотя def пока не проходили. Подразумевалось, что нужно решить задачу курса только пройденным материалом.
я уверен, что умение решать подобные задачи без списков очень им пригодится в дальнейшей деятельности.Надеюсь что да
Офлайн
Нигде не обнаружил решения, использующего обращение формулы арифметической прогрессии; обращая формулу арифметической прогресии можно получить решение этой задачи почти в “одну строку” :
from math import sqrt n = 5050 ' '.join(sum([['%s' % i] * i for i in range(int((sqrt(1 + 8 * n) - 1) / 2.0) + 1)] +\ [['%s' % (int((sqrt(1 + 8 * n) - 1) / 2.0) + 1,)] * (n - (int((sqrt(1 + 8 * n) - 1) / 2.0) + 1) * int((sqrt(1 + 8 * n) - 1) / 2.0) / 2)], []))
Отредактировано scidam (Июнь 25, 2016 05:42:34)
Офлайн
scidam
Это тот случай когда не надо строить решение в одну строку. - У вас кучка повторяющегося кода. Сам код сложно читаемый. Вы привели плохой пример реализации задачи. На собеседовании, например, это будет ощутимый минус в результат собеседуемого.
Офлайн
def get_seq(up): res = [] for i in range(1, up+1): res.extend([i]*i) return res def work(count): return get_seq(count)[:count] res = list(work(int(input('count: ')))) print(''.join([str(i) for i in res]))
Офлайн
Betonможет я не так понял условие но согласно примеру
Например, если n = 7, то программа должна вывести 1 2 2 3 3 3 4
a ='1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 '.split() n = 7 print(*(a[:n])) 1 2 2 3 3 3 4
Отредактировано marvellik (Июнь 25, 2016 21:44:06)
Офлайн
JOHN_16
Это тот случай когда не надо строить решение в одну строку….
from math import sqrt n = 3 # количество чисел m = int((sqrt(1 + 8 * n) - 1) / 2.0) l = int(n - m * (m + 1) / 2) res_array = list(map(lambda i: ['%s' % i] * i, range(m + 1))) res_array += [['%s' % (m+1, )]* l] print(' '.join(sum(res_array, [])))
Отредактировано scidam (Июнь 29, 2016 03:56:53)
Офлайн