>>> a=10
>>> print(str(a)[a==10])
0
>>> print(str(a)[a=='10'])
1
>>> print(str(a)[a=='11'])
1
上述 0 和 1 的结果是如何获得的?
让我们暂时搁置print
语句。
- 在方括号内,正在计算的表达式将生成布尔值。
a==10
之所以True
a
是因为int
等于 10,a=='10'
False
是因为a
不是值'10'
的str
。
- 这些布尔值中的每一个都隐式转换为 int,因为方括号正在索引字符串。因此,
True
成为索引 1,False
成为索引 0。 - 字符串已编制索引。
'1'
位于'10'
的索引 0 处,'0'
位于索引 1。请注意,返回的是字符串而不是整数,这是因为整个表达式的结果,例如str(a)[a==10]
是所有示例中的字符串。
所有这些都是在没有考虑print()
的情况下发生的。print()
只是将表示形式打印到屏幕上。0
整数和字符串'0'
在屏幕上看起来完全相同。尝试使用type()
来理解这一点。
这仅仅是因为字符串中的索引 让我解释一下
当你执行str(a)
时,你正在将a类型转换为字符串,从而将 10 转换为"10",其中"10"是包含 2 个字符("1"和"0")的字符串
现在,如果您有一个包含 2 个字符的字符串,则第 0 个索引中的字符是第一个字符('1'),而第一个索引中的字符是第二个字符('0')
即
animal = 'cat'
print(animal[0])
>>'c'
print(animal[1])
>>'a'
print(animal[2])
>>'t'
继续前进,现在在方括号内你有布尔语句,当值为True时,输出为 1,当值为False时,输出为 0
因此10==10
为真,即1
,因此str(a)[a==10]
为str(a)[1]
为0(第一个索引,但"10"的第2个字符)
10=='10'
false
这是0
因此str(a)[a=='10']
str(a)[0]
1
(第 0 个索引,但第 1 个字符 '10')
10=='11'
false
0
因此与第二种情况相同
str(a)[a=='11']
是str(a)[0]
1
(第 0 个索引,但第 1 个字符为">10")
a = 10, a is a integer value 10
在打印() 10 == 10 是假的,所以它将打印 str(a) 的第二个位置 即 0 10 == '10' 为真,因此它将打印 str(a) 的第一个位置 即 1
例:
a = 12
print(str(a)[4 == 4]) # output 2