Форум сайта python.su
4
Betonну оно поэтому и не получится если использовать строки таким образом. возьмем i == 10, в скобках получаем “10 ”, в список передается сначала “1”, затем “0”, потом “ ” и так десять раз.
ежели я правильно понимаю логику происходящего, сначала происходит сложение строк внутри скобок, каждое значение полученной строки передается в список последовательно i раз.
Да
Офлайн
0
Еще раз спасибо огромное, все получилось.
Вот итоговый код:
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 = " ")

Офлайн
857
>>> 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)
Офлайн
4
Betonя уверен, что умение решать подобные задачи без списков очень им пригодится в дальнейшей деятельности.
зы. Некоторые смогли решить задачу без списков, только циклами. Ну да ладно
Офлайн
0
py.user.nextpy.user.next, спасибо. Общий принцип понятен, хотя def пока не проходили. Подразумевалось, что нужно решить задачу курса только пройденным материалом.
я уверен, что умение решать подобные задачи без списков очень им пригодится в дальнейшей деятельности.Надеюсь что да

Офлайн
35
Нигде не обнаружил решения, использующего обращение формулы арифметической прогрессии; обращая формулу арифметической прогресии можно получить решение этой задачи почти в “одну строку” :
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)
Офлайн
221
scidam
Это тот случай когда не надо строить решение в одну строку. - У вас кучка повторяющегося кода. Сам код сложно читаемый. Вы привели плохой пример реализации задачи. На собеседовании, например, это будет ощутимый минус в результат собеседуемого.
Офлайн
0
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]))
Офлайн
73
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)
Офлайн
35
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)
Офлайн