元组

元组简介

元组(Tuple)与列表类似,最大的不同之处在于元组的元素不能修改。常用于存储一组固定的信息。
元组使用 () 定义,索引从 0 开始。
如:

info_tuple = ("Anne", 18, 1.7)

创建空元组:

info_tuple = ()

元组中只包含一个元素时,需要在元素后面添加逗号,否则只是一个单纯的数据类型:

info_tuple = (50, )

元组常用方法

count()index() 作用和列表中一样,分别是计数和返回下标。

元组的循环遍历

for item in info_tuple:

    print(item)

元组的应用场景

  • 作为函数的参数和返回值,一次性传递多种数据
  • 格式化字符串
    print("%s 的年龄是 %d,身高是 %.2f" % ("Anne", 18, 1.70))
    括号内的 ("Anne",18,1.70) 就是一个元组。
    info_tuple = ("Anne", 18, 1.70)
    
    print("%s 的年龄是 %d,身高是 %.2f" % info_tuple)
    
    # 使用元组还可以巧妙地拼接字符串  
    info_str = "%s 的年龄是 %d,身高是 %.2f" % info_tuple
    
    print(info_str)

元组和列表之间的转换

  • 元组转换成列表
    list(元组) 
  • 列表转换成元组
    tuple(列表)

字典

字典介绍

如果说列表是有序的对象集合,那么字典就是无序的对象集合。通常用于存储描述一个对象的相关信息。使用 print 输出字典时,通常显示的顺序和定义的顺序是不一致的。

字典使用 {} 定义。

字典使用 键值对 存储数据,键 key 是索引,值 value 是数据。键必须是唯一的。

键和值之间用 ; 分隔,键值对之间用 , 分隔。

值可以取任何类型的数据,但键只能是字符串、数字 或 元组。
如:

xiaoming = {"name": "小明",
            "age": 18,
            "gender": True,
            "height": 1.75}

字典的常用方法:

取值字典名[key]

增加 / 修改字典名[key] = value

  • 如果键值对不存在,则是增加
  • 如果键值对已存在,则是修改

删除字典名.pop(key)

统计键值对数量len(字典名)

合并 / 更新字典字典名.update(新字典名)

清空字典字典名.clear()

字典的循环遍历

xiaoming = {"name": "小明",
            "qq": "12345",
            "phone_number": "10086"}

for k in xiaoming:  # k 是每一次循环中,获取到的 key

    print("%s: %s" % (k, xiaoming[k]))

可以将多个 字典 放在一个 列表 中,然后循环进行处理。

card_list = [{"name": "张三",
              "qq": "12345",
              "phone": "110"},

             {"name": "李四",
              "qq": "54321",
              "phone": "10086"}
             ]

字符串

字符串简介

单引号 '' 和双引号 "" 都能定义字符串。
一般情况下,建议使用双引号定义字符串,因为很多编程语言都用双引号;如果想在字符串中使用双引号,就用但单引号定义字符串,如:

'我的外号是"大西瓜"'

字符串也使用 [] 获取单个字符。

字符串遍历

for char in string
    print(char)

字符串常用方法

  • len(字符串):获取字符串的长度
  • count(字符串):子字符串 在 字符串 中出现的次数

判断

  • string.isspace():如果 string 中只包含 空白字符(如 空格、\t\n\r),则返回 True

    string = " \t\n\r"
    print(string.isspace())
    True
  • string.isalnum():所有字符都是 字母 或 数字 则返回 True

  • string.isalpha():所有字符都是字母则返回 True


  • string.isdecimal():若 string 只包含阿拉伯数字,则返回 True
  • string.isdigit():若 string 只包含 阿拉伯数字、带括号型的数字 \u00b2(上标 2:²),则返回 True
  • string.isnumeric():若 string 只包含 阿拉伯数字、汉字数字,则返回 True
  • 以上数字判断均不包括小数。

查找和替换

  • string.startswith(str):若字符串以 str 开头则返回 True
  • string.endswith(str):若字符串以 str 结束则返回 True
  • string.find(str, start=0, end=len(string)):检测 str 是否包含在指定范围的 string 中,没找到则返回 -1
  • string.index(str, start=0, end=len(string)):跟 find() 方法类似,不过没找到则会报错
  • string.replace(old_str, new_str, num=string.count(old)):把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次。
    该方法不是修改原有的字符换,而是创建一个新的字符串。

文本对齐

  • string.center(width):返回一个原字符串居中,并使用指定字符填充至长度 width 的新字符串
    • string.ljust(width):左对齐
    • string.rjust(width):右对齐
poem = ["霜月",
        "李商隐",
        "初闻征雁已无蝉",
        "百尺楼高水接天",
        "青女素娥俱耐冷",
        "月中霜里斗婵娟"]

for poem_str in poem:

    print("|%s|" % poem_str.center(15, " "))

去除空白字符

  • string.strip():截掉 string 左右两边的空白字符
    • string.lstrip():截掉左边(开始)的空白字符
    • string.rstrip():截掉右边(末尾)的空白字符

拆分和连接

  • string.split(str="", num):以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 ‘\r’, ‘\t’, ‘\n’ 和空格

    poem_str = "霜月 \t 李商隐 \t 初闻征雁已无蝉 \n 百尺楼高水接天 \r 青女素娥俱耐冷  月中霜里斗婵娟"
    
    poem_list = poem_str.split()
    
    print(poem_list)
  • string.join(seq):以 string 作为分隔符,将 seq 列表中所有的元素合并为一个新的字符串

    result = " ".join(poem_list)
    
    print(result)

爬虫时,这些函数很有用。

字符串的切片

切片 方法适用于 字符串列表元组

字符串[开始索引:结束索引:步长]

指定的区间属于 左闭右开 型,比如 字符串[0:2],切出来的是 py,而不包括 t

想从头开始,则只需省略 开始索引;想切到末尾,则只需省略 结束索引。步长默认为 1

num_str = "0123456789"

print(num_str[2:6])

输出结果:2345

print(num_str[2:])

输出结果:23456789

print(num_str[:6])

输出结果:012345

print(num_str[:])

输出结果:0123456789

print(num_str[::2])

输出结果:02468

print(num_str[1::2])

输出结果:13579

print(num_str[-1])

输出结果:9

print(num_str[2:-1])

输出结果:2345678

print(num_str[-2:])

输出结果:89

print(num_str[::-1])

输出结果:9876543210


公共方法

列表、字典、元组、字符串都能使用的方法就是公共方法。

  • len(item):计算容器中元素个数
  • del(item):删除变量
    del 既能当作函数,又能当作关键字
    • 函数:del(a[1])
    • 关键字:del a[1]
  • max(item):返回容器中元素最大值
  • min(item):返回容器中元素最小值
    • 对于字典,maxmin 是针对 key 进行比较的
  • 切片
  • 运算符
    • +:合并

      • + 是生成新的列表,而 list.extend() 是直接追加在原列表后面
      • list.extend()list.append() 又有区别:
    • *:重复

      • 字典不能重复,因为须保证 key 是唯一的
    • 成员运算符

      • in:元素是否存在于容器内
      • not in:元素是否不存在于容器内
      • 对于字典,是针对 key 判断的
  • 完整的 for 循环语法
    for 变量 in 集合:
        
        循环体代码
    else:
        没有通过 break 退出循环,循环结束后会执行的代码
    students = [
        {"name": "阿土",
        "age": 20,
        "gender": True,
        "height": 1.7,
        "weight": 75.0},
    
        {"name": "小美",
        "age": 19,
        "gender": False,
        "height": 1.6,
        "weight": 45.0},
    ]
    
    find_name = "阿土"
    
    for stu_dict in students:
    
        print(stu_dict)
    
        if stu_dict["name"] == find_name:
            print("找到了")
            break
    
    else:
        print("没有找到")
    
    print("循环结束")