如果使用raw_input或只是赋值来初始化具有相同字母的字符串类型变量有什么区别吗?(Python 2.7)

时间:2016-05-12 19:50:34

标签: python string identity raw-input

当我试图在字符串中找到某个字母的索引时,我写了这段代码。如果我输入' 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

2 个答案:

答案 0 :(得分:2)

请勿使用is。两个对短字符串的引用是否是对同一确切对象的引用是依赖于实现的。请改用==

for i,x in enumerate(word) :
    if x == letterb:
        indexb.append(i)
print 'indexb=',indexb

编译代码时,letterbword的值都是已知的;这似乎允许Python实现在迭代letterb时重用x引用的word对象。但是,lettera是在运行时创建的,解释器只是创建一个新对象而不是搜索内存中的对象,以查看是否已存在'a'的对象。

答案 1 :(得分:0)

我也在使用python 2.7,我觉得这里没问题,它们完全一样。

Amelt <- melt(A, id.vars='x')
#Plot that orders legend according to order of columns in data frame.
#However, not sure how to thicken one particular line over the others.
pmelt <- ggplot(Amelt)+geom_line(aes(x=x, y=value, color=variable))

code and output