Найти - Пользователи
Полная версия: Циклическая задача
Начало » Центр помощи » Циклическая задача
1 2
sl0w
согласен что подобные совершенно выражения, насколько я помню код несколько раз видоизменялся вместе с переменными, итого остались такие отростки. Вполне вероятно что было дело в переносе строки, другого объяснения просто не вижу
py.user.next
Возможно, проверяльщик не стрипает правый пробел. Сделай, чтобы не было в конце пробела.
marvellik
n = int(input())
print(*[ i  for i in range(1,n+1) for j in range(1,i+1)][:n])
может так?
FishHook
marvellik
может так?
За такой код надо линейкой по рукам бить.
Stright
marvellik
Попробуйте миллион подставить в n
sl0w
итого, весь фарс был из за пробела, пришлось переписать все с 0, чтобы разобраться
всем спасибо за помощь и советы

питон сообщество и вправду очень отзывчивое
marvellik
FishHook
За такой код надо линейкой по рукам бить.
бить может каждый а вот объяснить за что единицы.
Stright
Попробуйте миллион подставить в n
попробовал. работает но долго.отсюда сделал выводы
1.не нужно в итоговый список добавлять все элементы итерации цикла а лучше добавить условие проверки при котором при достижении длины списка согласно условию,прервать цикл.
2. распаковка списка в print занимает больше времени чем преобразование числа в строку в цикле при создании списка. поэтому вывод элементов списка методом join пройдет быстрее.
я не волшебник я только учусь поэтому сильно не бейте по рукам!
FishHook
marvellik
бить может каждый а вот объяснить за что единицы.
Смотрите, ваш код можно развернуть в такой
c = 0
n = int(input())
res = []
for i in range(1, n+1):
    for j in range(1, i+1):
        res.append(i)
        c += 1
print(res[:n])
print("counts", c)
вот что мы получим
10
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
('counts', 55)

для получения десяти членов последовательности цикл выполнился 55 раз. Это нерационально.
Можно оптимизировать, например так
c = 0
n = int(input())
res = []
for i in range(1, n + 1):
    if c == n:
        break
    for j in range(1, i+1):
        res.append(i)
        c += 1
        if c == n:
            break
print(res[:n])
print("counts", c)
10
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
('counts', 10)

Простота питоньих языковых конструкций не означает, что их нужно бездумно применять не заботясь о качестве алгоритма. Ну и вообще, я бы не советовал вам увлекаться однострочниками: явное лучше неявного. Когда вам достанется в наследство чужой код на несколько десятков тысяч строк вот таких вот компактных, но плохо читаемых решений, тогда вы меня вспомните
Shaman
marvellik
попробовал. работает но долго.отсюда сделал выводы
Вы также на расход памяти внимание обратите!
Lestoroer
FishHook
Полностью согласен, однострочные коды читать очень тяжело.
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