Я начал с простого примера сравнения кода Python с c #, моим более привычным языком:

s=''
for x in range(20,1,-3):
    print(x)
    s+="%d%s" % (x,":")
print(s[:-1])

Просто вывод: 20: 17: 14: 11: 8: 5: 2

Затем я подумал о самом коротком, не обязательно самом эффективном способе сделать это и придумал это после прочтения о понимании списка.

print(''.join([("%d%s" % (x,":")) for x in range(20,1,-3)])[:-1])

Есть ли еще более короткий путь? Я знаю, что это тривиальная проблема, но на самом деле речь идет об изучении всех возможностей Python и о том, чем он отличается от других языков.

Благодарю.

0
Neil Walker 28 Фев 2018 в 13:27

3 ответа

Лучший ответ

Вот альтернатива (только Python 3.6+):

print(':'.join(f'{i}' for i in range(20, 1, -3)))

Как уже говорилось, ваша цель не должна состоять в том, чтобы сделать ваш код максимально лаконичным. Читаемость важнее.

2
thesilkworm 28 Фев 2018 в 10:35

Похоже, что последний фрагмент просто удалить неиспользованный :, так как насчет:

print(':'.join(map(str, range(20, 1, -3))))

Python - это не компактность, а удобочитаемость.

5
Yann Vernier 28 Фев 2018 в 10:32

Вы можете использовать

>>> ":".join(map(str, range(20,1,-3)))
>>> '20:17:14:11:8:5:2'
8
Sohaib Farooqi 28 Фев 2018 в 10:42