zoukankan      html  css  js  c++  java
  • 字符串

    常见字符串常量和表达式

    s = '' #空字符串
    s = "spam's" #双引号和单引号
    s = 's
    p	ax00m' #转义序列
    s = """...""" #三重引号字符串块
    s = r'	empspam' #Raw字符串
    s = b'spam' #python3.0中的字节字符串
    s = u'spam' #仅在python2.6中使用的unicode字符串
    s1 + s2 #合并
    s * 3 #重复
    s[i] #索引
    s [i:j] #分片
    len(s) #求长度
    "a %s parrot" % kind #字符串格式化表达式
    "a {0} parrot".format(kind) #python2.6和python3.0的字符串格式方法
    s.find('pa') #字符串方法:搜索
    s.rstrip() #移除空格
    s.replace('pa', 'xx') #替换
    s.split(',') #用占位符分割
    s.isdigit() #检查是否只由数字组成
    s.lower() #转为小写
    s.endswith('spam') #是否以制定后缀结尾
    'spam'.join(strlist) #插入分割符
    s.encode('latin-1') #unicode编码
    for x in s: print(x) #迭代,成员关系
    'spam' in s
    [c * 2 for c in s]
    map(ord, s)

    字符串常量

    单双引号字符串是一样的,而且python会自动在任意表达式中合并相邻的字符串常量。

    title = "Meaning " 'of' " Life"
    #'Meaning of Life'

    用转义序列代表特殊字节

    ewline #忽视(连续)
    \ #反斜杠
    ' #单引号
    " #双引号
    a #响铃
     #倒退
    f #换页
    
     #换行
    
     #返回
    	 #水平制表符
    v #垂直制表符
    N #unicode数据库ID
    uhhhh #unicode 16位的十六进制值
    Uhhhhhhhh #unicode 32位的十六进制值
    xhh #十六进制值
    xx #八进制值
     #Null
    other #不转义

    一些转义字符允许一个字符串中嵌入绝对的二进制值。

    s = 'abc'
    s
    #'ax00bx00c'
    len(s)
    #5

    注意,python以十六进制现实非打印的字符。

    如果python找不到合法的转义编码,就会保留反斜杠。

    raw字符串抑制转义

    如果使用以下参数去打开文件就会出错:

    myfile = open('C:
    ew	ext.dat', 'w')

    会被识别为一个换行字符, 会被识别为一个制表符。如果在字符串第一个引号前面放一个字母r(大写或小写),它就会关闭转义机制。

    myfile = open(r'C:
    ew	ext.dat', 'w')

    还有一种办法,用两个反斜杠来代表一个反斜杠。

    myfile = open('C:\new\text.dat', 'w')

    三重引号编写多行字符串块

    如果希望一些行的代码不工作,之后再运行,可以简单在这几行前后加入三重引号。

    x = 1
    """
    import os
    print(os.getcwd())
    """
    y = 2

    实际应用中的字符串

    基本操作

    字符串可以用+来合并,*来重复。

    'abc' + 'def'
    #'abcdef'
    
    'NI!' * 5
    #'NI!NI!NI!NI!NI!'

    可以用for语句在字符串中循环迭代,in操作符可以对字符串进行搜索。

    my = 'dsfdgdfg'
    for c in my:
         print(c, end = ' ')
    #d s f d g d f g
    
    'd' in my
    #True
    
    'f' in my
    #True

    索引和分片

    python可以通过索引来获取字符串中的字符,python的偏移量从0开始,并且还支持负偏移量,一个负偏移加上字符串的长度就等于正偏移,可以把负偏移看做从结束处反向计数。

    s = 'spam'
    s[0], s[-2]
    #('s', 'a')
    
    s[1:3], s[1:], s[:-1]
    #('pa', 'pam', 'spa')

    当使用分片时,左边的偏移作为下边界(下边界包含在内),右边的偏移作为上边界(不包含上边界在内)。python将获取从下边界开始直到不包含上边界的所有元素。如果省略,上下边界默认分别是0和对象的长度。

    索引s[i]获取特定偏移的元素:

    • 第一个元素偏移为0
    • 负偏移意味着从最后或右边反向计数
    • s[0]获取第一个元素,s[-2]获取倒数第二个元素,就和s[len(s)-2]一样

    分片s[i:j]提取对应部分作为一个序列:

    • 上边界并不包含在内
    • 分片的默认边界为0和序列的长度
    • s[1:3]获取了从偏移为1的元素到不包含偏移为3的元素
    • s[:]获取了偏移0到末尾之间的元素,有效实现顶层s拷贝

    s[i:j]实现了一个完全的顶层的序列对象的拷贝,一个有相同值,但是不同内存片区的对象。但对于字符串这样不可变对象并不是很有用,但对于可以原地修改的对象却很实用,例如列表。

    扩展分片:第三个限制值

    分片的第三个索引,是步进。完整的分片为x[i:j:k],这表示“索引x对象中的元素,从偏移为i知道偏移为j-1,没隔k个元素索引一次”。k默认是1,如果定义了一个值,就会跳过某些元素或者反向排列顺序。

    s = 'abcdefghijklmnop'
    s[1:10:2]
    #'bdfhj'
    s[::2]
    #'acegikmo'

    如果使用负数作为步进,步进-1表示从右往左,实际效果就是将序列反向。

    s = 'hello'
    s[::-1]
    'olleh'

    字符串转换工具

    int('42'), str(42)
    #(42, '42')
    
    repr(42)
    #'42'

    int()将字符串转换成数字,而str()将数字转换成字符串。repr()也可以转换对象为字符串。

    repr()与str()的区别是,repr()返回的对象可以作为代码字符串,可以重新创建对象,也就是说obj = eval(repr(obj))是成立的。

    字符串代码转换

    单个字符可以传给ord()转换为对应的ASCII码。

    ord('s')
    #115
    
    chr(115)
    #'s'

    下面的程序可以转换二进制数为十进制数:

    b = '1101'
    i = 0
    while b != '':
        i = i * 2 + (ord(b[0]) - ord('0'))
        b =b[1:]
    i
    #13

    修改字符串

    字符串是不可变序列,所以想要原地修改字符串会报错,因此需要利用合并,分片这样的工具来处理然后赋值给一个新的字符串。也可以使用字符串格式化。

    注意:

    python3.0和2.6中引入了一种新字符串类型bytearray,它可以修改。bytearray并不是真正的字符串,它是较小的,8位整数序列。

    字符串方法

  • 相关阅读:
    中位数--贪心问题
    子串和子序列的区别
    unique from STL
    哈希表(1598. 文件夹操作日志搜集器)
    最短路dijkstra算法以及spfa算法
    二分+dfs 1631. 最小体力消耗路径
    java学习
    语料处理 合集
    Pytorch-创建图片的dataset和dataloader和数据过采样
    2020年9~10月
  • 原文地址:https://www.cnblogs.com/hahazexia/p/7337108.html
Copyright © 2011-2022 走看看