Понимание списка с несколькими условиями - PullRequest
0 голосов
/ 09 июля 2019

В данный момент я пытаюсь выяснить, как решить простую задачу, используя List Compreatsion.Смысл в том, чтобы составить список и заполнить его 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_)

Ответы [ 6 ]

2 голосов
/ 09 июля 2019

У вас есть 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]
1 голос
/ 09 июля 2019

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

Во-вторых, это то, что вам нужно

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

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

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

0 голосов
/ 11 июля 2019

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

[int(idx==0 or idx==desired_length - 1) for idx in range(desired_length)]
0 голосов
/ 09 июля 2019

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

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

Надеюсь, я помог!

0 голосов
/ 09 июля 2019

Здесь

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 голосов
/ 09 июля 2019

с использованием списка

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]
...