список останавливается только после того, как элемент списка становится номером 7 - PullRequest
0 голосов
/ 11 июня 2019

Я хочу написать код, содержащий подсписок, который останавливается только после того, как элемент списка является определенным числом, например 9.

Я уже пробовал использовать разные операторы if.

def sublist (list): 
return [x for x in list if x  <9]

[7,8,3,2,4,9,51] вывод для списка выше должен быть: [7,8,3,2,4]

Ответы [ 3 ]

2 голосов
/ 11 июня 2019

Список пониманий действительно для составления комбинаций картирования / фильтрации. Если длина зависит от какого-то предыдущего состояния в итерации, вам лучше использовать цикл for, он будет более читабельным. Однако это вариант использования для itertools.takewhile. Вот функциональный подход к этой задаче, просто для удовольствия, некоторые могут даже считать его читабельным:

>>> from itertools import takewhile
>>> from functools import partial
>>> import operator as op
>>> list(takewhile(partial(op.ne, 9), [7,8,3,2,4,9,51]))
[7, 8, 3, 2, 4]
1 голос
/ 11 июня 2019

Вы можете использовать iter() встроенный со значением часового ( официальный документ )

l = [7,8,3,2,4,9,51]
sublist = [*iter(lambda i=iter(l): next(i), 9)]
print(sublist)

Печать:

[7, 8, 3, 2, 4]
1 голос
/ 11 июня 2019

Начнем с того, что не стоит использовать ключевые слова Python, такие как list, в качестве переменной.

Понимание списка [x for x in list if x < 9] отфильтровывает элементы меньше 9, но не остановится, когдавстречает 9, вместо этого он будет проходить по всему списку

Пример:

li = [7,8,3,2,4,9,51,8,7]
print([x for x in li if x < 9])

Вывод

[7, 8, 3, 2, 4, 8, 7]

Чтобы достичь того, что вы ищете, вывы хотите цикл for, который прерывается, когда он встречает данный элемент (9 в вашем случае)

li = [7,8,3,2,4,9,51]

res = []
item = 9

#Iterate over the list
for x in li:
    #If item is encountered, break the loop
    if x == item:
        break
    #Append item to list
    res.append(x)

print(res)

Выходные данные

[7, 8, 3, 2, 4]
...