加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python:通过’list [a:b]’的迭代是否首先复制列表的那部分(这

发布时间:2020-12-16 23:28:44 所属栏目:Python 来源:网络整理
导读:当我从开始到停止迭代list1的值时,如: for value in list1[start:stop]: .... python是否首先复制列表的那一部分(就像在执行list2 = list1 [:]时那样)?对于大型列表,这可能会变得非常昂贵! 如果它没有在上面的例子中复制它,那总是适用吗?我需要经常在(
当我从开始到停止迭代list1的值时,如:
for value in list1[start:stop]:
    ....

python是否首先复制列表的那一部分(就像在执行list2 = list1 [:]时那样)?对于大型列表,这可能会变得非常昂贵!

如果它没有在上面的例子中复制它,那总是适用吗?我需要经常在(非常)大型列表的大部分上执行以下类型的循环:

for index,value in enumerate(list1[start:stop],start):
    ....

解决方法

list1 [start:stop]创建一个新列表,句点.总是如此,无论您是直接迭代结果还是在其间使用函数或在任何其他上下文中使用它(您需要适度静态语言或复杂类型推断,以便优化甚至简单第一种情况的实例).

请注意,这与迭代无关!迭代本身不会复制,即使您将结果丢弃,列表也会复制.

它只复制指针,所以如果你总是采用非常小的子列表,你可能不会注意到任何差异.如果子列表较大,您可以迭代索引([x]范围)或使用itertools.islice.后者必须首先跳过启动项目,因此您可能需要花费大量时间才能节省内存.前者是丑陋的,但大多数都是无意义的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读