• python全栈_006_Python3基本数据类型--字符串


    把字符连成串,在Python中使用', ",''',"""引起来的内容被称为字符串。

    在Python中字符串是一种不可变数据类型,即不可修改变量对应内存中的内容,对字符串变量重新赋不同的值会重新创建对象,分配内存:

    s = 'abcd'
    #s[0] = 'A'  # 不能执行这样的操作,字符串为不可变数据类型
    print(s[0])  # 只可以通过下标访问,不能通过下标修改其值
    print(s,id(s))
    s = 'abce'  # 重新赋值,重新创建了一个对象,分配了新的内存
    print(s,id(s))
    
    s = s + 'a' # 字符串的连接,也会重新创建对象
    print(s,id(s))
    
    s = s * 2 # 重复字符串,也会重新创建对象
    print(s,id(s))

    1 :切片和索引

    1.1: 索引

       索引就是下标. 切记, 下标从0开始:

    #    01234
    s = 'Hello'
    print(s[0])
    print(s[1])
    print(s[2])
    print(s[3])
    print(s[4])
    #print(s[5])   #  没有5, 越界了了. 会报错 string index out of range
    print(s[-1])   # -1 表示倒数第一个。
    print(s[-2])   # -2 表示倒数第二个。

    1.2:切片:

      我们可以使用下标来截取部分字符串的内容
      语法: str[start: end]
      规则: 顾头不顾尾, 从start开始截取. 截取到end位置. 但不包括end (start<= x < end)

    s = '中华人民共和国'
    print(s[0:3]) # 输出 中华人
    print(s[2:6]) # 输出 人民共和
    print(s[2:7]) # 输出 人民共和国
    print(s[2:20]) # 输出 人民共和国 ,如果右边已经超过了最大值,相当于获取到最后;
    print(s[2:]) # 输出 人民共和国 ,如果想获取到最后,那么最后一个值可以不给。
    
    print(s[3:2])  # 取不到任何结果,默认的方向是从左往右切,从3向右数,你怎么数也数不到2
    print(s[-1:-4]) # 取不到任何结果,默认的方向是从左往右切,从-1向右数,你怎么数也数不到-5
    
    print(s[-4:-1]) # 输出 民共和  ,顾头不顾尾,取不到最后一个
    print(s[-4:])   # 输出 民共和国 ,什么不写就是最后一个了
    
    print(s[1:])   # 输出"华人民共和国" ,去掉第一个字符
    print(s[:-1])  # 输出"中华人民共和" ,取到倒数第一个,即去掉倒数一个字符
    print(s[:])    # 原样输出,输出 中华人民共和国

      跳着截取

      步长: 如果是整数, 则从左往右取. 如果是负数. 则从右往左取. 默认是1
      切片语法: start
      str[start:end:step]
      start: 起始位置
      end: 结束位置
      step:步长

    '''
    str[start:end:step]
      start: 起始位置
      end: 结束位置
      step:步长,默认为1 ,(不能为0)
    
    执行过程(个人理解,未验证):
        cur = start
        if step > 0
            while cur < end:
                取 s[cur]
                cur += step
        elif
            while cur > end:
                取 s[cur]
                cur += step
    '''
    s = '坚持走符合国情的人权发展道路促进人的全面发展'
    print(s[1:7:2]) # 输出 第1 3 5 位的,输出 "持符国"
    print(s[:7:2])  # 输出 第0 2 4 6 位的,输出 "坚走合情"
    print(s[6::2])  # 从6开始到最后,每两个取一个;输出"情人发道促人全发"
    print(s[-7::2]) # 从-7开始取到最后,每两个取一个;输出"进的面展"
    print(s[-1:-7]) # -1:-7 什么都没有,因为从左到右获取(-1,0,1,2,不可能到达-7;)
    print(s[-1:-7:-1]) # -1 -2 -3 -4 -5 -6 ,输出 "展发面全的人"
    print(s[5:2]) # 什么都没有,
    print(s[5:2:-1]) # 5 4 3,输出 "国合符"
    
    s = 'hello'
    print(s[2:])     # step > 0,到最末尾,输出"llo"
    print(s[2::-1])  # step < 0,到最开始,输出"leh"
    print(s[::])     # 输出 "hello"
    print(s[::-1])   # 输出 "olleh"  

    2:字符串的相关操作方法

      字符串是不可变数据类型, 所以任何操作对原字符串是不会有任何影响的;所有操作都是产生新字符串返回;

    2.1:大小写转来转去

    #1:首字母大写
    s = 'all for One, one For all.'
    print("1:",s)
    s.capitalize()  #首字母大写
    print("2:",s)  # 输出不会有任何变化,因为Python中字符串为不可变类型,需要把转换结果重新赋值给字符串变量
    
    s1 = s.capitalize()  # 重新创建了一个对象,
    print("3:",s1)
    
    
    #2:大小写的转换
    ### 全部转换为小写字母
    ret = s.lower()
    print("4:",ret)
    
    ### 全部转换为大写字母
    ret = s.upper()
    print("5:",ret)
    
    # 应用,检验用户输入的检验
    '''
    varify_code = "aDdwS"
    user_varify_code = input("请输入验证码:")
    if varify_code.upper() == user_varify_code.upper():
        print("验证成功")
    else:
        print("验证失败")
    '''
    
    ### 大小写互相转换
    ret = s.swapcase()
    print("6:",ret)
    
    ### 转换为小写字符,
    ret = s.casefold()   # lower() 对某些字符支持不够好;casefold() 支持所有字符
    print("7:",ret)
    
    #每个被特殊字符隔开的字母首字母大写
    s2 = "the longest day has*an end."
    ret = s2.title()
    print("8:",ret)
    
    #中文也是特殊字符
    s2 = "the中国longest day"
    ret = s2.title()
    print("9:",ret)

    2.2:切来切去

    s = '刘德华'
    ret = s.center(10,"*")  # 拉长成10, 把原字符串放中间.其余位置补*
    print("1:",ret)
    
    s = 'all for One, one 	For all.'
    print("2:",s)
    print("2:",s.expandtabs()) # 可以改变	的长度,默认长度更改为8
    
    #去空格
    s = '  all for One, one  For all   '
    ret = s.strip()
    print("4:",ret)
    
    s = '  all for One, one  For all   '
    ret = s.lstrip()  # 去掉左边空格
    print("5:",ret)
    
    s = '  all for One, one  For all   '
    ret = s.rstrip() # 去掉右边空格
    print("6:",ret)
    
    '''
    #应用:模拟用户登录. 忽略用户输入的空格
    username = input("请输入用户名:").strip()
    password = input("请输入密码:").strip()
    if username == 'admin' and password == 'admin123':
        print("登录成功")
    else:
        print("登录失败")
    '''
    
    #strip()也可以去掉指定的元素
    s = "abcdadalacbabc;askda;abc"
    print("7:",s.strip("abc"))
    print("8:",s.lstrip("abc"))
    print("9:",s.rstrip("abc"))
    
    #字符串替换
    s = 'all for One, one  For all'
    ret = s.replace('al','hello') # 字符串为不可变数据类型,所有操作都是产生新字符串返回
    print("10:",ret)
    
    ret = s.replace('o','uuu',2) # 替换2个
    print("11:",ret)
    
    # 字符切割
    s = 'all for One, one For all'
    lst = s.split(' ')
    print(lst)
    
    lst = s.split(',')
    print(lst)
    
    lst = s.split('oo')
    print(lst)
    
    lst = s.split('all')  #['', ' for One, one For ', '']  如果切割符在左右两端. 那么一定会出现空字符串
    print(lst)

    2.3:格式化输出

    #格式化输出
    s = "我叫%s,今年%d岁了,我喜欢%s"%('joshou',19,'刘德华')
    print(s)
    s1 = "我叫{},今年{}岁了,我喜欢{}".format('joshou',19,'刘德华')  # 指定格式化
    print(s1)
    
    s2 = "我叫{0},今年{1}岁了,我喜欢{2}".format('joshou',19,'刘德华') # 指定位置
    print(s2)
    
    s2 = "我叫{1},今年{2}岁了,我喜欢{0} 我喜欢{0}".format('刘德华','joshou',19)  # 指定位置
    print(s2)
    
    s2 = "我叫{name},今年{age}岁了,我喜欢{singer} 我喜欢{singer}".format(singer = '刘德华',name = 'joshou',age = 19) # 指定关键字
    print(s2)

    2.4:查找

    # 是否以xxxx开头
    s = "我叫iSwqr,haha,我喜欢python, java, cpp等编程语言."
    ret = s.startswith("iSwqr") # 判断是否以"iSwqr"开头
    print(ret)  # False
    
    ret = s.startswith("我叫iSwqr") # 判断是否以"我叫iSwqr"开头
    print(ret)  # True
    
    #是否以xxxx结尾
    ret = s.endswith("语言") # 判断是否以"语言"结尾
    print(ret)  # False
    
    ret = s.endswith("语言.") # 判断是否以"语言."结尾
    print(ret)  # True
    
    # 出现的次数
    ret = s.count('a')
    print(ret) # 4
    
    ret = s.count('haha')
    print(ret) # 1
    
    # 查找 (没有找到返回-1,找到返回首次出现的位置)
    ret = s.find('iSwqr')  # 查找'iSwqr'首次出现的位置
    print(ret)  # 2
    
    ret = s.find('ha')   # 查找'ha'首次出现的位置
    print(ret)  # 8
    
    ret = s.find('hello')   # 查找'hello'首次出现的位置,如果没有找到返回-1
    print(ret)  # -1
    
    ret = s.find('ha',1,7)   # 切片找,
    print(ret)  # -1
    
    ret = s.index('iSwqr')  # 求索引位置。注意:如果找不到索引,程序会报错
    print(ret)  # 2

    2.5:条件判断

    s1 = '123.45'
    s2 = 'abcd'
    s3 = '_abcd!@#'
    s4 = 'abcd1234'
    s5 = '1234'
    #是否由字母和数字组成(全字母,全数字,或者字母数字的组合)
    print('=1:===isalnum()===')
    print(s1.isalnum()) # False
    print(s2.isalnum()) # True
    print(s3.isalnum()) # False
    print(s4.isalnum()) # True
    print(s5.isalnum()) # True
    
    #是否由字母组成
    print('=2:===isalpha()===')
    print(s1.isalpha()) # False
    print(s2.isalpha()) # True
    print(s3.isalpha()) # False
    print(s4.isalpha()) # False
    print(s5.isalpha()) # False
    
    #是否由数字组成,不包括小数点:
    print('=3:===isdigit()===')
    print(s1.isdigit()) # False
    print(s2.isdigit()) # False
    print(s3.isdigit()) # False
    print(s4.isdigit()) # False
    print(s5.isdigit()) # True
    
    print('=4:===isdecimal()===')
    s1 = '1253.16'
    s5 = '1253'
    print(s1.isdecimal())  # False
    print(s5.isdecimal())  # True
    
    print('=5:===isnumeric()===')
    s1 = '1253.16'
    s5 = '1253'
    print(s1.isnumeric())
    print(s5.isnumeric())
    s6= '二十'
    print(s6.isnumeric())  # True,isnumeric()能识别中文的数值

    2.6:求字符串的长度

    s = '算你狠,haha'
    ret = len(s) # len = 8
    print(ret,s)
    
    s1 = s.encode('utf-8')
    ret = len(s1)  # 3 * 3 + 5
    print(ret,s1) # len = 14
    
    s2 = s.encode('gbk')
    ret = len(s2)  # 2*3 + 5
    print(ret,s2)  # len = 11

    2.7:迭代

    
    

      我们可以使用for循环来便利(获取)字符串中的每一个字符
      语法:
      for 变量 in 可迭代对象:
        pass
      可迭代对象: 可以一个一个往外取值的对象

    
    
    s = '算你狠,haha'
    for c in s:
        print(c,end = ' ')
    
    print('')
    
    index = 0
    while index < len(s):
        print(s[index],end= ' ')
        index += 1
    
    '''
    in有两种用法:
    1. 在for中:是把每一个元素获取到,然后赋值给前面的变量。
    2. 不在for中: 判断xxx是否出现在str中.
    '''
    
    print('')
    print('xsd' in s)  # False
    print('haha' in s) # True
    
    
    




  • 相关阅读:
    Freemarker进行非空处理
    Freemarker导出带多个不重复图片的word
    Freemarker导出带图片的word
    怎样在Android本地视频播放器开发
    详细解说九宫图比较常用的多控件布局
    POJ 3189 Steady Cow Assignment【网络流】
    C++获取文件大小常用技巧
    operation is executing and cannot be enqueued
    Android 异步链式调用设计
    LINUX编程学习笔记(十三) 遍历目录的两种方法
  • 原文地址:https://www.cnblogs.com/ixuby/p/10094857.html
Copyright © 2020-2023  润新知