Python .pop() 组合表达式时的行为不同



我在python中使用列表时遇到了一些奇怪的行为。

我的代码是

input_data = open('day_3_input.txt', 'r').read()
instructions = input_data.split('n')
print(len(instructions))

此输出为

3

为了删除最后不需要的元素,我做了一个 pop()

input_data = open('day_3_input.txt', 'r').read()
instructions = input_data.split('n')
instructions.pop()
print(len(instructions))

正如预期输出是

2

但是如果我跑

input_data = open('day_3_input.txt', 'r').read()
instructions = input_data.split('n').pop()
print(len(instructions))

我的输出是

0

这种不同行为的原因是什么?

你应该注意方法pop()有一个返回值。

  • pop()参数

pop() 方法采用单个参数(索引)。

传递给该方法的参数是可选的。如果未传递,则默认索引 -1 作为参数(最后一项的索引)传递。

如果传递给该方法的索引不在范围内,则会引发 IndexError: 弹出索引超出范围异常。

  • pop()方法返回给定索引中存在的项。此项也会从列表中删除。

所以如果你运行

input_data = open('day_3_input.txt', 'r').read()
instructions = input_data.split('n').pop()
print(len(instructions))

instructions等于拆分数组input_data最后一个元素。

因此,它将打印拆分input_data数组最后一个元素的长度,而不是拆分input_data数组的长度。

查看在n上拆分文件内容后instruction变量中包含的项目。您可能会看到''和列表的末尾。因此,当您pop()它时,您将获得列表的最后一项(在本例中为'',显然长度为0)。而在前者中,您首先有一个包含 3 个项目的列表,弹出一个项目会导致一个包含 2 个项目的修改列表。

顺便说一句,在后一种形式中,您只将一个项目放入instruction变量中(pop()的输出)。