Уведомления

Группа в Telegram: @pythonsu

#1 Май 13, 2016 20:37:11

sl0w
Зарегистрирован: 2016-04-28
Сообщения: 109
Репутация: +  1  -
Профиль   Отправить e-mail  

Циклическая задача

согласен что подобные совершенно выражения, насколько я помню код несколько раз видоизменялся вместе с переменными, итого остались такие отростки. Вполне вероятно что было дело в переносе строки, другого объяснения просто не вижу

Офлайн

#2 Май 14, 2016 01:49:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9891
Репутация: +  854  -
Профиль   Отправить e-mail  

Циклическая задача

Возможно, проверяльщик не стрипает правый пробел. Сделай, чтобы не было в конце пробела.



Отредактировано py.user.next (Май 14, 2016 01:49:29)

Офлайн

#3 Май 15, 2016 10:55:59

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Циклическая задача

n = int(input())
print(*[ i  for i in range(1,n+1) for j in range(1,i+1)][:n])
может так?

Офлайн

#4 Май 15, 2016 11:12:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Циклическая задача

marvellik
может так?
За такой код надо линейкой по рукам бить.



Офлайн

#5 Май 15, 2016 11:39:42

Stright
От: Кострома
Зарегистрирован: 2015-01-20
Сообщения: 139
Репутация: +  16  -
Профиль   Отправить e-mail  

Циклическая задача

marvellik
Попробуйте миллион подставить в n

Офлайн

#6 Май 15, 2016 15:02:26

sl0w
Зарегистрирован: 2016-04-28
Сообщения: 109
Репутация: +  1  -
Профиль   Отправить e-mail  

Циклическая задача

итого, весь фарс был из за пробела, пришлось переписать все с 0, чтобы разобраться
всем спасибо за помощь и советы

питон сообщество и вправду очень отзывчивое

Офлайн

#7 Май 15, 2016 15:44:45

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Циклическая задача

FishHook
За такой код надо линейкой по рукам бить.
бить может каждый а вот объяснить за что единицы.
Stright
Попробуйте миллион подставить в n
попробовал. работает но долго.отсюда сделал выводы
1.не нужно в итоговый список добавлять все элементы итерации цикла а лучше добавить условие проверки при котором при достижении длины списка согласно условию,прервать цикл.
2. распаковка списка в print занимает больше времени чем преобразование числа в строку в цикле при создании списка. поэтому вывод элементов списка методом join пройдет быстрее.
я не волшебник я только учусь поэтому сильно не бейте по рукам!

Офлайн

#8 Май 15, 2016 16:06:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Циклическая задача

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)

Простота питоньих языковых конструкций не означает, что их нужно бездумно применять не заботясь о качестве алгоритма. Ну и вообще, я бы не советовал вам увлекаться однострочниками: явное лучше неявного. Когда вам достанется в наследство чужой код на несколько десятков тысяч строк вот таких вот компактных, но плохо читаемых решений, тогда вы меня вспомните



Офлайн

#9 Май 15, 2016 18:21:19

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Циклическая задача

marvellik
попробовал. работает но долго.отсюда сделал выводы
Вы также на расход памяти внимание обратите!

Офлайн

#10 Май 15, 2016 19:15:35

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Циклическая задача

FishHook
Полностью согласен, однострочные коды читать очень тяжело.

Отредактировано Lestoroer (Май 15, 2016 19:16:21)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version