python - 将列表切片到给定元素

标签 python arrays python-3.x list

如果你有一个列表 my_list = ['a', 'd', 'e', 'c', 'b', 'f'] 并且你想构建一个子列表,包含给定元素之前的所有元素,例如 my_list_up_to_c = ['a', 'd', 'e'],这如何以一种易于扩展的方式完成?也可以通过使用 numpy 数组来加快速度吗?

最佳答案

最少的代码可能是使用 .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)(根据 this source ),这意味着它取决于切片的大小。

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

关于python - 将列表切片到给定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55513322/

相关文章:

javascript - 何时使用包含对象的对象与 JSON 中的对象数组的可接受约定是什么?

python - 打印 1-100 的数字,跳过可被 3 和 5 整除的数字

python - 将键的所有其他值设置为0(第一个值除外)的Python方法

python - 在rtree中,如何指定 float 相等性测试的阈值?

python - 有人可以告诉我如何下载wxPython Phoenix吗?

c# - 通过高阶方法遍历n维数组

python - QObject 衍生物中的变量访问怪异

python - 1064、 "You have an error in your SQL syntax;..."Python MySQL

python - 上传亚马逊s3 python,boto3后获取文件url

c++ - 在 C++ 的二进制文件中发出读/写结构数组