Python中将列表转换为字符串时出现的意外行为疑问
问题解答
1. 为什么在格式化字符串中打印时,x和y都显示为列表格式?
这是代码笔误导致的:打印y值的格式化字符串中,错误引用了变量x,对应代码行是:print(f"y = {x} \ny.find('B') is: {y.find('B')}\n\n")
本该填入{y}的位置写为了{x},所以打印出来的y值实际是x的内容,才会出现两者都显示列表格式的错觉。
2. 尽管type(x) == type(y)返回结果为True,为什么直接使用print(x)和print(y)的输出格式不同?
你已经通过x = str(x)将原本为列表类型的x强制转为了字符串类型,所以x和y都是字符串类型,类型判断结果自然为True。
Python中对列表执行str()转换时,会把列表的字面展示形式完整转为字符串,转换后的x实际存储的内容是"['A', 'B', 'C', 'D']",是一个包含方括号、单引号、逗号、空格的普通字符串,和y存储的"ABCD"内容本身就完全不同,所以直接打印的输出格式不一样。
3. 字符串/列表长度为4,为什么x.find('B')返回结果为7,而y.find('B')的运行结果符合预期?
转成字符串后的x长度远大于4,我们可以把x的内容按索引拆解验证:
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| 字符 | [ | ' | A | ' | , | 空格 | ' | B |
字符B刚好处于索引7的位置,所以x.find('B')返回7。而y存储的是无额外符号的"ABCD",B在索引1位置,结果符合预期。
内容的提问来源于stack exchange,提问作者Shay
相关产品推荐
相关产品推荐

