Наименьшее количество кода, вероятно, будет использовать .index()
(обратите внимание, что этот поиск выполняется до первого появления элемента в указанном списке):
>>> my_list = ['a', 'd', 'e', 'c', 'b', 'f']
>>> my_list
['a', 'd', 'e', 'c', 'b', 'f']
>>> my_list[:my_list.index('c')] # excluding the specified element
['a', 'd', 'e']
>>> my_list[:my_list.index('c')+1] # including the specified element
['a', 'd', 'e', 'c']
Временная сложность вызова .index()
равна O(n)
, что означает, что он будет повторяться не более одного раза по списку. Нарезка списка имеет сложность O(k)
(согласно этому источнику ), то есть это зависит от размера среза.
Таким образом, в худшем случае искомый элемент находится в конце списка, поэтому поиск будет выполняться до конца списка (O(n)
), а фрагмент также скопирует весь список (также O(n)
), что приводит к наихудшему случаю O(2n)
, который по-прежнему имеет линейную сложность.