Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果使用原始输入或仅仅赋值来初始化具有相同字母的字符串类型变量,有什么区别吗?(Python 2.7)_Python_String_Identity_Raw Input - Fatal编程技术网

如果使用原始输入或仅仅赋值来初始化具有相同字母的字符串类型变量,有什么区别吗?(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=',

当我试图在字符串中找到某个字母的索引时,我编写了这段代码。如果我输入“a”并将该值输入到字母a,对于indexaindexb,它们应该具有相同的结果。但是,indexb=[0,3]和indexa=[]。我不明白为什么。原始输入()有什么特别之处吗?我使用的python版本是2.7,有人能帮我吗

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的评论了吗?他们测试的是身份,而不是平等。