Помогите сократить код питон
Заменить все числа, меньшие последнего элемента массива, на 1.
m = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
if m[0] < m[-1]:
m[0] = 1
if m[1] < m[-1]:
m[1] = 1
if m[2] < m[-1]:
m[2] = 1
if m[3] < m[-1]:
m [3] = 1
if m[4] < m[-1]:
m[4] = 1
if m[5] < m[-1]:
m[5] = 1
if m[6] < m[-1]:
m[6] = 1
if m[7] < m[-1]:
m[7] = 1
if m[8] < m[-1]:
m[8] = 1
if m[9] < m[-1]:
m[9] = 1
print(m)
Ответы (2 шт):
Решается через цикл for:
m=[1,2,3,4,5,6,7,8,9,10]
for i in range(len(m)-1):
if m[i] < m[-1]:
m[i] = 1
Либо использовать генератор списков:
m=[1,2,3,4,5,6,7,8,9,10]
res = [1 if x < m[-1] else x for x in m]
Ваш подход хороший, но — как вы правильно предполагаете — код практически тот же самый для всякого элемента.
Например, здесь ваши команды if:
if m[0] < m[-1]:
if m[1] < m[-1]:
if m[2] < m[-1]:
...
if m[9] < m[-1]:
Правые стороны сравнивания все идентичны, а в левых только меняется число от 0 до 9.
Назовем это число i и для себя запишем всех 9 команд if в сокращенной форме, как в математике:
-
if m[i] < m [-1]: (для i = 0, 1, 2, ..., 9)
То же самое с командами после команд if, и мы добавим их в нашу сокращенную форму в виде тоже только одной команды с переменной i:
-
if m[i] < m [-1]: (для i = 0, 1, 2, ..., 9) m[i] = 1
Но чтобы ясно было, что заметка
-
(для i = 0, 1, 2, ..., 9)
касается теперь обеих команд, поместим ее вверх и обе команды отступим:
-
для i = 0, 1, 2, ..., 9: if m[i] < m [-1]: m[i] = 1
Остается только записать эту заметку в соответствии с правилами Питона:
-
for i in 0, 1, 2, 3, 4, 5, 6, 7, 8, 9: if m[i] < m [-1]: m[i] = 1
Замечания:
В Питоне, к сожалению, невозможно пользоваться тремя точками как в математике, но существует другой механизм:
- диапазон, по-английски
range.
В скобках за функцией
range()задается первое число диапазона, и затем первое число за диапазоном, т.е. то, которое в него уже не входит:for i in range(0, 10):Даже возможно первое число пропустить, когда оно равно 0:
for i in range(10):- диапазон, по-английски
Программисты не любят «магические» числа, как например 10. Теперь ваш список имеет 10 чисел, но что в случае, когда их будет скажем 32?
Для числа элементов в списке существует функция
len()(из английского length, длина), мы можем применить ее к нашему спискуmчтобы магическое число 10 заменить наlen(m):for i in range(len(m)): if m[i] < m [-1]: m[i] = 1Наш путь к улучшению вашей программы в определенном смысле парадоксальный:
- Ваш оригинальны код понимают (почти) все.
- Код с
for i in 0, 1, 2, 3, 4, 5, 6, 7, 8, 9:большой прыжок, но все равно еще понятный. - Код c
for i in range(0, 10):уже может ввести в заблуждение. - Код c
for i in range(10):уже почти непонятный. - Но и
for i in range(len(m)):понимает только тот, который сам так делает.
Вопрос тогда в том, где остановиться...
Или для кого пишете вашу программу.
Потому что программы пишутся для людей, а не для компьютеров.