在 Python 上从列表转换为字符串时出现意外行为

Unexpected behavior when casting from list to string on Python

当我发现这种行为时,我正在摆弄 Python,我无法真正理解它。代码如下:

x = ['A','B','C','D']
x = str(x)
y = "ABCD"

print(f"x = {x} \nx.find('B') is: {x.find('B')}\n\n")
print(f"y = {x} \ny.find('B') is: {y.find('B')}\n\n")

print(x)
print(y)

print(type(x)==type(y))

并且控制台上的输出是:

x = ['A', 'B', 'C', 'D']
x.find('B') is: 7


y = ['A', 'B', 'C', 'D']
y.find('B') is: 1


['A', 'B', 'C', 'D']
ABCD
True

我不完全理解的是: 为什么 x 和 y 在格式化字符串中打印时显示为列表?

为什么只使用print(x)print(y)打印方式不同,即使type(x) == type(y)

特别是为什么 x.find('B') 是 7,而 string/list 的长度是 4,而 y.find('B') 按预期工作?

可能是一个微不足道的问题,但我没有在网站上找到类似的问题。谢谢!

您的 print(y) 输出看起来很奇怪的原因是您实际上将 x 传递给 print。同样,您在 x.find('B') 中看到的情况正在发生,因为您正在将 'x' 转换为 str。这不会给你一个列表,而是一个看起来像 "['A', 'B', 'C', 'D']" 的字符串。所以这里 B 确实是字符串的第 7 个索引