我在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()
的输出)。