python - 列表理解中的条件没有索引错误

标签 python list indexing list-comprehension

当我运行代码时:

mylist = []
mylist[1]

我收到 IndexError:列表索引超出范围。这对我来说很有意义。但是当我运行以下代码时:

mylist = []
newlist = [x for x in mylist if mylist[1] == 'mystring']
print(newlist)

我没有收到索引错误,它只是打印了一个空列表。这就是我希望代码执行的操作,但我不明白为什么它不给我和 IndexError。据我所知,这仅在列表为空时发生,否则如果您对列表进行索引超出范围,则可能会出现索引错误。例如:

mylist = ['string']
newlist = [x for x in mylist if mylist[1] == 'mystring']

返回我期望它返回的 IndexError。

如果有人可以帮助解释为什么如果你有一个条件语句在列表理解中指定一个空列表的索引,你不会得到索引错误,那就太棒了。

最佳答案

这与条件和理解无关。这只是一个事实,即迭代一个空序列或集合不会产生迭代。请注意以下代码块如何在 for 循环中不产生错误,即使未定义 x:

>>> a = 0
>>> for i in []:
...     x = x + 2
...
>>> a
0
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

关于python - 列表理解中的条件没有索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32755641/

相关文章:

python - Python 3 __future__ 模块中 print_function 的奇怪行为

python - 在谷歌云上训练神经网络时出现 "Unable to get Filesystem for path"错误

python - 为什么 list.remove 只删除第二个项目?

AngularJS 和谷歌搜索引擎优化索引

java - 查询索引数据库的java代码与查询未索引数据库的java代码相同吗?

python - 如何再次从类中调用已经锁定的代码块?

python - 在 django-admin 中使用 django 将用户数据导出为 CSV

python - Python中列表,序列和切片之间的区别?

python - 如何使用 re.compile 和 re.findall 删除括号内的文本?

java - 取自文本文件 : index out of range 的字符数组