У меня есть простая задача выбрать все элементы из списка (отсортированного по убыванию), которые лежат над заданным элементом. т.е.Нарушение цикла в понимании списка в python
X=[32,28,26,21,14,11,8,6,3]
Threshold=12
Result=[32,28,26,21,14]
То, что я изначально было что-то простое, как
FullList=[x for x in FullList if x>=Threshold]
Однако, поскольку список отсортирован, я могу (и нужно) перерыв между ними.
После долгих ударов головой и красивого учебника here я наконец придумал следующее решение.
def stopIteration():
raise StopIteration
FullList=list(x if x>=Threshold else stopIteration() for x in FullList)
Однако, когда я пишу следующее заявление, он дает мне ошибку синтаксиса:
FullList=list(x if x>=Threshold else raise StopIteration for x in FullList)
Что является причиной такого поведения?
'х, если х> = Порог еще поднять StopIteration' не является допустимым выражением, потому что' поднять StopIteration' не имеет значения, поэтому он не может быть добавлен к списку. По какой причине вы не просто используете для этого цикл? – khelwood
Вы должны были прочитать учебник, о котором вы говорили более тщательно. Он отвечает на ваш конкретный вопрос (не действительное выражение) и упоминает использование itertools.takewhile, а также несколько хакерский (IMO) метод, используя определенную пользователем функцию stopif() для повышения StopIteration в неявном контуре понимания - это действительно довольно хороший учебник. –