当我试图在字符串中找到某个字母的索引时,我写了这段代码。如果我输入' a'并将此值赋予 lettera ,对于 indexa 和 indexb ,它们应该具有相同的结果。但是, indexb = [0,3]和 indexa = []。我不明白为什么。 raw_input()有什么特别之处吗?我使用的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
答案 0 :(得分:2)
请勿使用is
。两个对短字符串的引用是否是对同一确切对象的引用是依赖于实现的。请改用==
。
for i,x in enumerate(word) :
if x == letterb:
indexb.append(i)
print 'indexb=',indexb
编译代码时,letterb
和word
的值都是已知的;这似乎允许Python实现在迭代letterb
时重用x
引用的word
对象。但是,lettera
是在运行时创建的,解释器只是创建一个新对象而不是搜索内存中的对象,以查看是否已存在'a'
的对象。
答案 1 :(得分:0)