Помогите сократить код питон

Заменить все числа, меньшие последнего элемента массива, на 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 шт):

Автор решения: Dr Proger

Решается через цикл 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] 
→ Ссылка
Автор решения: MarianD

Ваш подход хороший, но — как вы правильно предполагаете — код практически тот же самый для всякого элемента.

Например, здесь ваши команды 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
    

Замечания:

  1. В Питоне, к сожалению, невозможно пользоваться тремя точками как в математике, но существует другой механизм:

    • диапазон, по-английски range.

    В скобках за функцией range() задается первое число диапазона, и затем первое число за диапазоном, т.е. то, которое в него уже не входит:

    for i in range(0, 10):
    

    Даже возможно первое число пропустить, когда оно равно 0:

    for i in range(10):
    

     

  2. Программисты не любят «магические» числа, как например 10. Теперь ваш список имеет 10 чисел, но что в случае, когда их будет скажем 32?

    Для числа элементов в списке существует функция len() (из английского length, длина), мы можем применить ее к нашему списку m чтобы магическое число 10 заменить на len(m):

     for i in range(len(m)):
         if m[i] < m [-1]: 
             m[i] = 1
    

     

  3. Наш путь к улучшению вашей программы в определенном смысле парадоксальный:

    • Ваш оригинальны код понимают (почти) все.
    • Код с 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)): понимает только тот, который сам так делает.

    Вопрос тогда в том, где остановиться...
    Или для кого пишете вашу программу.
    Потому что программы пишутся для людей, а не для компьютеров.

→ Ссылка