В данный момент я пытаюсь выяснить, как решить простую задачу, используя List Comp понять. Смысл в том, чтобы составить список и заполнить его 1 в начале и в конце списка. Остальные элементы заполнены 0.

Я уже попробовал следующее:

desired_length = int(input('Enter the desired length: '))
list_=[0 if x==0 if x==desired_length-1 else x for x in range(desired_length)]
print(list_)

Изменить . Исправлены квадратные скобки.

И вот код, который я пытаюсь преобразовать:

def test():
    desired_length = int(input('Enter the desired length: '))
    list_ = []
    for i in range(desired_length):
        if i == 0 or i == desired_length - 1:
            list_.append(1)
        else:
            list_.append(0)
    print(list_)
0
Alex.Kh 9 Июл 2019 в 14:39

6 ответов

Лучший ответ

Во-первых, словарь определяется {}, а список - [], вы определяете словарь, а не список.

Во-вторых, это то, что вы хотите

[1 if (idx==0 or idx == (desired_length-1)) else 0 for idx in range(desired_length)]

То, что вы делаете, устанавливает 1 в начале и в конце, но 1,2,3 и так далее между

В-третьих, у вас есть условие для установки 0 в начале и конце, а не 1.

1
Imtinan Azhar 9 Июл 2019 в 11:45

Используя понимание списка

desired_length = int(input('Enter the desired length: '))
list_ = [(1 if i in [0,desired_length-1] else 0) for i in range(desired_length)]
print(list_)

Выход

Enter the desired length: 10
[1, 0, 0, 0, 0, 0, 0, 0, 0, 1]
0
sahasrara62 9 Июл 2019 в 11:44

У вас есть 2 очень простых способа достижения желаемого результата.

Вы можете использовать оператор in и, поскольку bool является подмножеством int, просто приведите его к int:

list_ = [int(i in (0, desired_length - 1)) for i in range(desired_length)]

Или просто с помощью оператора «звезда» распаковать список нулей length-2 и поставить 1 на каждом конце, цикличность не требуется

list_ = [1, *([0]*(desired_length-2)), 1]
2
Jab 9 Июл 2019 в 12:10

Есть простой способ сделать это. Вот мой код:

def test():
    desired_length = int(input('Enter the desired length: '))
    list_ = [0]*desired_length
    list_[0]=1
    list_[-1]=1

Я надеюсь, что помог!

0
Larissa Teixeira 9 Июл 2019 в 11:48

Здесь я использую выражение короткого замыкания вместо тернарного условия (как и ответ Имтинана Ажара)

[int(idx==0 or idx==desired_length - 1) for idx in range(desired_length)]
0
Raja Sakthiyan 11 Июл 2019 в 17:26

Вот

desired_length = int(input('Enter the desired length: '))
lst = [1 if idx == 0 or idx == desired_length-1 else 0 for  idx,x in enumerate(range(desired_length))]
print(lst)
0
balderman 9 Июл 2019 в 11:45