关键词搜索

源码搜索 ×
×

Python第五章-内置数据结构01-字符串

发布2021-01-13浏览314次

详情内容

​ 到目前为止,我们如果想保存一些数据,只能通过变量。但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实。

​ 我们需要能够保存大量数据的类似变量的东东,这种东东就是数据结构(Data Structures)。

​ 数据结构,它们只是一种结构,能够将一些数据聚合在一起的结构。换句话说,它们是用来存储一系列相关数据的集合

​ python 提供了 4 种内置数据结构:List(列表)、Tuple(元组)、Dictionary(字典)、Set(集合)

​ 严格来说,字符串也是一种数据结构,因为他把字符组织在了一起。

​ 所以,本章先从字符串开始讲起。

字符串就是一串字符,是编程语言中表示文本的数据类型

在Python中可以使用 一对双引号或者一对单引号定义一个字符串

虽然可以使用"或’做字符串的转移,但是实际开发中

如果字符串内容需要使用",可以使用’定义字符串
如果字符串内容需要使用’,可以使用"定义字符串
str1 = “hello python”
str2 = “你是’王二狗’么”
str3 = ‘你是"李小花"么’
print(str1)
print(str2)
print(str3)
在前面的学习中我们已接近了解了什么是字符串,字符串的连接,输出等。下面我们开始学习字符串更高级的功能。

  • 用来连接两个字符串
  • 用来重复字符串

上面两个操作符可以都可以操作变量。

a = "你好"
b = a + "world"
c = b * 3
print(b)
print(c)

    如果两个或多个字符串字面量写在一起,则他们会自动的连接在一起。

    d = "a" "b""c"  "你好"
    print(d)   # abc你好
    
    • 1
    • 2

    注意:

    只都是字符串字面量才可以通过这种方法连接,变量不能参与
    字符串之间不要添加任何标点符号
    如果想要打破比较长的字符串,这种方式尤其有用。

    text = ("窗前明月光" 
            "疑是地上霜"
            "举头望明月"
            "低头思故乡")
    print(text)
    

      ​ 字符串的长度,就是指的字符串中字符的个数。使用内置函数 len() 来获取字符串长度。 len() 可以获取任何序列的长度,后面我们会了解更多。

      s = "hello world"
      print(len(s))    # 11
      
      • 1
      • 2

      ​ 字符串中的每个字符都有一个编号,这个编号在编程语言中一般称之为索引(index、下标)。可以通过索引单独去访问字符串中的每个字符。

      ​ 另外,由于 python 中没有字符类型,所以即使拿到的是单个字符也是字符串类型的。

      ​ index 是从 0 开始,最后一个字符的索引:字符串长度 - 1

      s = "hello world"
      print(s[0])
      print(s[3])
      print(s[len(s) - 1])
      
      • 1
      • 2
      • 3
      • 4

      索引也可以是负值,表示从右开始计算。-1 就是最后一个元素的索引。 -0 和 0 是一样的。

      s = "hello world"
      
      print(s[-1])
      print(s[-2])
      print(s[-len(s)])
      

        如果 index 超出了范围,则会抛出异常。所以使用的时候一定要小心,防止下标越界。

        s = "hello world"
        print(s[len(s)])
        
        • 1
        • 2

        ​ 使用 index 只能获取单个的字符。而字符串的切片操作可以获取子字符串。

        ​ python 的切片操作非常的优雅!如果你使用过别的语言,就知道我为什么这么说了。

        s = "life is short, use python"
        print(s[0:4])  # 获取下标为 0(包括) 到下标为 4(不包括) 的子字符串    "life"
        print(s[2:3])    # "f"
        print(s[2:])    # fe is short, use python
        print(s[:4])    # life
        print(s[-2:])    # on
        
          6

        注意:

        切片的时候,总是开始下标包括,结束下标不包括
        第一个下标和最后一个下标都可以省略。如果省略第一个下标则默认值是 0,如果省略第二个下标则默认值是字符串的长度
        虽然在使用下标获取单个字符的时候,如果超出范围会抛出异常。

        但是在切片的时候,如果越界则不会抛出异常。

        s = "life is short, use python"
        print(s[9:100])        # hort, use python
        print(s[-1:1000])    # n
        
        • 1
        • 2
        • 3

        字符串的不可变性是指,字符串在内存中一旦创建,则字符串的内容终身无法更改。如果想获取不同的字符串,只能再重新创建一个字符串。

        不可变的好处就是,共享而不用担心同步问题。因为大家都不能修改。

        所以,通过下标修改字符串中的某个字符是错误,会抛出异常。

        s = "life is short, use python"
        s[0] = "c"    #    不能修改,这行代码会抛出异常
        
        • 1
        • 2

        如果需要不同的字符串,应该创建一个新的,如下面的代码:

        s = "life is short, use python"
        s1 = "P" + s[1:]
        print(s1)
        
        • 1
        • 2
        • 3

        前面学习了 +、*、[]、[:]运算符可以操作字符串,还有一些其他的运算符也可以操作字符串。

        in

        测试字符串是否包含这样的子字符串

        s = "python"
        print("p" in s)        # True      s 中是否包含字符串`p`
        print("a" in s)        # False
        not in
        
        • 1
        • 2
        • 3
        • 4

        与 in 的含义相反

        s = "python"
        print("a" not in s)        # False
        print("P" not in s)        # True
        %(了解)
        
        • 1
        • 2
        • 3
        • 4

        格式化字符串。格式化字符串有比较多的格则,与 c 语言的 printf() 的格式化规则一样。

        常用的就下面 3 种。

        name = input("请输入你姓名:")
        age = int(input("请输入你的年龄:"))
        print("你好%s,你今年%s, 你的工资是 %.2f" % (name, age, 30000.4598))
        
        • 1
        • 2
        • 3

        前面学习的一些函数都是内置函数,直接调python基础教程用即可。

        下面再学习几个字符串对象的方法。(实例方法, 后面面向对象再具体详细学习)

        需要注意:在下面的方法中, 如果是涉及到修改字符串的,一定是创建了一个新的字符串,并返回。

        使用: 字符串.方法(参数) 来调用

        s.capitalize() 把首字母变换为大写字母,并返回字符串
        
        s.lower() 把字符串中的所有字母变小写
        
        s.upper() 把字符串中的所有字母变大写
        
        s.swapcase() 大小写互换
        
        s.title() 标题化 每个单词的首字母大写
        
        s.center(w)
        
          6
        • 7
        • 8
        • 9
        • 10
        • 11

        把字符串居中,用空格填充两边。w 是填充后的总长度。如果不想用空格填充,可以传入第二个参数,必须是一个字符。

        s.isalnum()

        如果字符串的长度大于 0 ,并且所有字符都是字母或数字,则返回 True

        s.isalpha()

        如果字符串的长度大于 0 ,并且所有字符都是字母,则返回 True

        s.isdigit()

        如果字符串的长度大于 0 ,并且所有字符都是数字,则返回 True

        s.islower()

        所有字母是否全是小写

        s.isupper()

        所有字母是否全是大写

        s.istitle()

        字符串中每个单词首字母是否大写

        s.isspace()

        是否全是空白字符,并至少有一个字符

        s.startswith(prefix, start, end)

        切片[start, end]范围内是否以prefix开头

        s.endswith(suffix, start, end)

        切片[start, end]范围内是否以suffix结尾

        s.split(sep, maxsplit)使用 sep 去切割字符串,如果不传入 sep则默认使用 空白字符 maxsplit为最大分割次数
        s.rsplit(sep, maxsplit)使用 sep 从右侧开始切割字符串,如果不传入 sep则默认使用 空白字符 maxsplit为最大分割次数
        s.splitelines(keepends)按照行分割字符串,keepends为bool值,默认为False, 如果为真,保留行分隔符
        s.join(seq) 把seq代表的序列用s连接起来
        s.find(str, beg=0, end=len)

        方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回 -1。

        s.rfind(str, beg=0, end=len)从右侧开始检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回 -1。

        s.index(str, beg=0, end=len)方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回错误。

        s.rindex(str, beg=0, end=len)从右侧开始检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回 错误。

        count(substr, start, end)计算substr在切片[start,end]范围内出现的次数
        
        replace(oldstr, newstr, count) 把oldstr替换为newstr, count为替换次数
        
        s.strip([chars])
        

          把字符左右两端的 chars 去掉 。如果不传入参数,默认去除空格。 中间的不去掉。

          s.lstrip([chars]) s.rstrip([chars])
          
          • 1

          去掉左边或右边的指定字符,默认是空格

          s = "hello"
          print(s.capitalize())
          print(s.center(30, "z"))
          print(s.find("el"))
          print("123".isdigit())
          print("122".isnumeric())
          print("  ab  c   ".strip())
          print("aabbaa".strip("a"))
          print(max([100, 30, 40, 90]))
          print("10.2.3.5".split("."))
          print("hell world".title())
          
            6
          • 7
          • 8
          • 9
          • 10
          • 11

          EOF

          本文作者:平仄平仄平平仄
          本文链接:https://www.cnblogs.com/yanadoude/p/12604427.html

          相关技术文章

          点击QQ咨询
          开通会员
          返回顶部
          ×
          微信扫码支付
          微信扫码支付
          确定支付下载
          请使用微信描二维码支付
          ×

          提示信息

          ×

          选择支付方式

          • 微信支付
          • 支付宝付款
          确定支付下载