如果使用原始输入或仅仅赋值来初始化具有相同字母的字符串类型变量,有什么区别吗?(Python 2.7)
当我试图在字符串中找到某个字母的索引时,我编写了这段代码。如果我输入“a”并将该值输入到字母a,对于indexa和indexb,它们应该具有相同的结果。但是,indexb=[0,3]和indexa=[]。我不明白为什么。原始输入()有什么特别之处吗?我使用的python版本是2.7,有人能帮我吗如果使用原始输入或仅仅赋值来初始化具有相同字母的字符串类型变量,有什么区别吗?(Python 2.7),python,string,identity,raw-input,Python,String,Identity,Raw Input,当我试图在字符串中找到某个字母的索引时,我编写了这段代码。如果我输入“a”并将该值输入到字母a,对于indexa和indexb,它们应该具有相同的结果。但是,indexb=[0,3]和indexa=[]。我不明白为什么。原始输入()有什么特别之处吗?我使用的python版本是2.7,有人能帮我吗 word='abca' lettera=raw_input("please input:") letterb='a' print 'letterb=',letterb print 'lettera=',
word='abca'
lettera=raw_input("please input:")
letterb='a'
print 'letterb=',letterb
print 'lettera=',lettera
indexa=[]
indexb=[]
for i,x in enumerate(word) :
if x is letterb:
indexb.append(i)
print 'indexb=',indexb
for i,x in enumerate(word) :
if x is lettera:
indexa.append(i)
print 'indexa=',indexa
我也在使用Python2.7,我认为这里没有问题,它们完全相同
>>> indexa == indexb
True
>>>
我也在使用python 2.7,我看这里没有问题,它们完全一样
>>> indexa == indexb
True
>>>
不要使用
is
。对短字符串的两个引用是否是对同一确切对象的引用取决于实现。改用==
for i,x in enumerate(word) :
if x == letterb:
indexb.append(i)
print 'indexb=',indexb
编译代码时,
letterb
和word
的值都是已知的;这似乎允许Python实现在迭代word
时,为x
重用lettb
引用的对象<代码>字母a是在运行时创建的,解释器只是创建一个新对象,而不是在内存中搜索对象以查看是否已经有一个对象用于'a'
不要使用is
。对短字符串的两个引用是否是对同一确切对象的引用取决于实现。改用==
for i,x in enumerate(word) :
if x == letterb:
indexb.append(i)
print 'indexb=',indexb
编译代码时,
letterb
和word
的值都是已知的;这似乎允许Python实现在迭代word
时,为x
重用lettb
引用的对象<代码>字母a是在运行时创建的,解释器只是创建一个新对象,而不是在内存中搜索对象以查看是否已经有一个对象用于'a'
好问题though@Y.Chen试着把这个测试放到你的脚本中,在构建索引数组之前,打印字母A是字母B
-是
运算符与=
运算符有很大不同,后者测试相等性,前者测试身份。您的解释器原始输入
似乎没有将缓存对象重新用于a
-如果你想得到同样的结果,测试是否相等,使用=
,使用is
是为非常特殊的问题保留的。问得好though@Y.Chen试着把这个测试放到你的脚本中,在构建索引数组之前,打印字母A是字母B
-是
运算符与=
运算符有很大不同,后者测试相等性,前者测试身份。您的解释器原始输入
似乎没有将缓存对象重新用于a
-如果你想得到同样的结果,测试平等性,使用=
,使用is
是为非常特殊的问题保留的。你误解了这个问题。你读过我对OP的评论了吗?他们测试的是身份,而不是平等。你误解了这个问题。你读了我对OP的评论了吗?他们测试的是身份,而不是平等。