Python之字符串使用

183 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

前言

继上篇《初识Python》之后我们开始进一步了解Python的字符串使用,因为笔者一直以来使用的是java,所以会在其中和java进行对比。

多种方式表示字符串

''或者""(java只能使用“”)

if __name__ == '__main__':
    str1 = 's1'
    print(str1)
    str2 = "s1"
    print(str2)

    str3 = '"hello"'
    print(str3)
    str4 = "'hello'"
    print(str4)

    str5 = "\"hello\""
    print(str5)
    str6 = '"Isn\'t," they said.'
    print(str6)

如果不想\表示转义,可以使用r

if __name__ == '__main__':
    str7 = 'my\name'
    print(str7)
    str7=r'my\name'
    print(str7)

输出:

my
ame
my\name

跨行

可以使用'''扩起来,也可以使用\n

if __name__ == '__main__':
    str8="my name\nis whf"
    print(str8)
    str8='''my name
is whf
    '''
    print(str8)

拼接

if __name__ == '__main__':
    str9 = 3 * 'ha' + ' is me'
    print(str9)

或者不加+

if __name__ == '__main__':
    str9 = 3 * 'ha' ' is me'
    print(str9)
    str9 = (
        3 * 'ha'
            ' is me')
    print(str9)

但是不适用于表达式或者变量还是要使用+

使用下标索引字符

这点比java方便很多,java需要转成char[]。可以从头0开始,还可以从尾-1开始

if __name__ == '__main__':
    str10 = "Python"
    print(str10[0])
    print(str10[5])
    print(str10[-1])
    print(str10[-6])

输出:

P
n
n
P

还支持切片获取子字符串,包含start不包含end,start不填默认为0,end不填默认为string的大小:

if __name__ == '__main__':
    str10 = "Python"
    print(str10[4:])
    print(str10[-2:])

输出:

on
on

记忆切片的方法,索引视为字符之间的指向:

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

所以上面的程序等同于下面的:

if __name__ == '__main__':
    str10 = "Python"
    print(str10[4:6])
    print(str10[-2:6])

索引太大会导致错误:

if __name__ == '__main__':
    str10 = "Python"
    print(str10[53])

输出:

Traceback (most recent call last):
  File "/Users/wanghaifeng/PycharmProjects/study/basic/strings.py", line 39, in <module>
    print(str10[53])
IndexError: string index out of range

但是切片不会报错(java会,笔者觉得也合理,切不到返回空):

if __name__ == '__main__':
    str10 = "Python"
    print(len(str10[53:]))

输出:

0

Python的字符串是不可变的所以不能更改的,因此使用索引或者切片修改字符串是会报错的:

if __name__ == '__main__':
    str10 = "Python"
    str10[0]='J'
    str10[0:2] = 'Ja'

输出:

Traceback (most recent call last):
  File "/Users/wanghaifeng/PycharmProjects/study/basic/strings.py", line 40, in <module>
    str10[0:2] = 'Ja'
TypeError: 'str' object does not support item assignment

这里我想说下java的,java的字符串想索引需要转成char[],截取使用substring,获取之后都是可以重新赋值的,但是不影响字符串本身,只是创建了新的对象把引用重新赋值了,效果和Python的一样,但是java不会报错,确实容易产生歧义。