将列表切成一个给定的元素

时间:2019-04-04 10:10:50

标签: python arrays python-3.x list

如果您有一个列表my_list = ['a', 'd', 'e', 'c', 'b', 'f'],并且想要构建一个子列表,其中包含直到一个给定元素的所有元素,例如my_list_up_to_c = ['a', 'd', 'e'],那么如何以易于扩展的方式来完成此操作?还可以通过使用numpy数组来使其更快吗?

3 个答案:

答案 0 :(得分:3)

最少的代码可能会使用Spotify Docker client(请注意,这会一直搜索到所述列表中元素的第一次出现):

ContainerExit

调用docker.waitContainer()的时间复杂度为>>> 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()(根据.index()),这意味着它取决于切片的大小。

因此,在最坏的情况下,您要查找的元素位于列表的末尾,因此您的搜索将一直运行到列表的末尾(O(n)),并且切片也会复制整个列表( O(k)),导致O(n)的最坏情况仍然是线性复杂度。

答案 1 :(得分:2)

使用index()获取列表项的首次出现。然后使用切片符号获取列表的所需部分。

>>> my_list = ['a', 'd', 'e', 'c', 'b', 'f']
>>> my_list[:my_list.index('c')]
['a', 'd', 'e']

答案 2 :(得分:1)

itertools解决方案

In[9]: from itertools import takewhile
In[10]: my_list = ['a', 'd', 'e', 'c', 'b', 'f'] 
In[11]: list(takewhile(lambda x: x != 'c', my_list))
Out[11]: ['a', 'd', 'e']

在Haskell中应该是

takeWhile ((/=) 'c') "adecbf"