首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解python中的列表

了解python中的列表
EN

Stack Overflow用户
提问于 2020-02-01 04:27:52
回答 3查看 68关注 0票数 0

为了求职面试的目的,我目前正在学习python。关于python中的列表,我正在尝试理解以下内容:

为什么下面两段代码会产生不同的输出?

代码语言:javascript
复制
arr = [1,2,3,9,10,12]
for i in arr:
  arr.remove(i)

这将导致列表2,9,12,但如下所示:

代码语言:javascript
复制
arr = [1,2,3,9,10,12]
for i in list(arr):
  arr.remove(i)

这将产生所需的空列表[]。有人能解释一下为什么会这样吗?既然remove()按项值移除,那么以第一种方式迭代列表不是也会导致一个空列表吗?

免责声明,我正在通过HackerRank使用Python3测试这一切。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-01 04:31:21

代码语言:javascript
复制
for i in arr:
   ...

内部使用索引从数组中删除元素,这意味着如果第一个元素被删除,它将继续索引2,这是3,它删除3,然后转到索引4,然后继续...

然而,第二个并不这样做,它实际上遍历每个值并将其删除,因为在删除过程中数组不会调整大小

票数 3
EN

Stack Overflow用户

发布于 2020-02-01 04:44:08

迭代器首先指向位置0,然后删除第一个条目2。然而,在第二次迭代中,它指向位置1,但是您的列表变成了2,3,9,10,12,因此它删除了3(位置1中的元素)。因此,列表中的第一个元素永远不会被删除,出于同样的原因,随着迭代器的移动,它会跳过所有其他元素。在第二个例子中,list(arr)创建了一个新的副本,因为它在迭代期间从未被修改过,所以它的所有元素都指向原始列表,然后从原始列表中删除。

一般来说,在迭代集合时从集合中移除元素是不好的。

票数 1
EN

Stack Overflow用户

发布于 2020-02-01 04:44:50

试着看一下下面的代码。它应该可以帮助您了解幕后发生的事情:

代码语言:javascript
复制
arr = [1,2,3,9,10,12]
index = 0

for i in arr:
  print('First print: ', i, index, arr[index])
  arr.remove(i)
  print('Second print: ', i, index, arr[index])
  index += 1

  # ('First print: ', 1, 0, 1)
  # ('Second print: ', 1, 0, 2)
  # ('First print: ', 3, 1, 3)
  # ('Second print: ', 3, 1, 9)
  # ('First print: ', 10, 2, 10)
  # ('Second print: ', 10, 2, 12)

arr = [1,2,3,9,10,12]
index = 0

for i in list(arr):
  print('First print: ', i, index, arr[index])
  arr.remove(i)
  print('Second print: ', i, index, arr[index])
  index += 1

  # ('First print: ', 1, 0, 1)
  # ('Second print: ', 1, 0, 2)
  # ('First print: ', 2, 1, 3)
  # ('Second print: ', 2, 1, 9)
  # ('First print: ', 3, 2, 10)
  # ('Second print: ', 3, 2, 12)
  # Traceback (most recent call last):
  #  File "<stdin>", line 2, in <module>
  # IndexError: list index out of range
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60010804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档