Python高级变量类型

Python数据类型

Python中数据类型可以分为数字型和非数字型

  • 数字型
    • 整型(int)
    • 浮点型(float)
    • 布尔型(bool)
      • 真 True 非0整 –非零即真
      • 假 False 0
    • 复数型(complex)
      • 主要用于科学计数,例如:平面场问题,波动问题,电感电容等问题
  • 非数字型
    • 字符串
    • 列表
    • 元组
    • 字典
      在Python中,所有非数字型变量都支持以下特点:
    • 都是一个序列 sequence,也可以理解为容器
    • 取值[]
    • 遍历 for in
    • 计算长度、最大/最小值、比较、删除
    • 链接 + 和重复 *
    • 切片

1、列表

1.1、列表的定义

  • List(列表)是Python中使用最频繁的数据类型,在其它语言中通常叫做数组
  • 专门用于存储一串信息
  • 列表用[]定义,数据之间使用,分隔
  • 列表的索引从0开始
    • 索引就是数据在列表中的位置编号,索引又被称为下标

从列表中取值时,如果超出索引范围,程序会报错

1.2、列表常用操作

示例代码

点击查看代码
# 列表定义规范:用[]定义;元素一般数据类型相同,也可以不同;列表定义后元素也可以进行修改
# 定义一个列表对象
name_list = ["张三","李四","王五"]
# 1.取值和取索引
print(name_list[1])
print(name_list.index("张三"))
# 2.修改
name_list[1] = "lisi"
# 3.新增
# append方法可以向列表的末尾追加数据
name_list.append("张三")
# insert方法可以向列表中指定索引位置插入数据
name_list.insert(3,"王小二")
# extend方法可以把其它列表中的完整内容插入列表末尾
temp_list = ["孙悟空","猪八戒"]
name_list.extend(temp_list)
# 4.删除
# remove可以从列表中删除指定的第一次出现的数据,如果数据不存在,程序会报错
#name_list.remove("王五")
# pop方法默认可以把列表中最后一个元素弹出删除
#name_list.pop()
# pop方法可以删除指定索引位置的元素
#name_list.pop(3)
# clear方法可以清空列表
#name_list.clear()
# del关键字删除列表元素
del name_list[1]
# 5.统计列表元素长度
str_len = len(name_list)
print("列表的长度为:%d " % str_len)
# 6.统计数据在列表中出现的次数
count = name_list.count("张三")
print("张三出现的次数:%d" % count)
print(name_list)

分类 关键字/函数/方法 说明
增加 列表.insert(索引,数据) 在指定位置插入数据
列表.append(数据) 在末尾追加数据
列表.extend(列表2) 将列表2的数据追加到列表
修改 列表[索引]=数据 修改指定索引的数据
删除 del 列表[索引] 删除指定索引的数据
列表.remove[数据] 删除第一个出现的指定数据
列表.pop 删除末尾数据
列表.pop(索引) 删除指定索引数据
统计 len(列表) 列表长度
列表.count(数据) 数据在列表中出现的次数
排序 列表.sort() 升序排序
列表.sort(reverse=True) 降序排序
列表.reverse() 逆序、反转

**关键字、函数和方法(科普)

  • 关键字是Python内置的、具有特殊意义的标识符

关键字后面不需要使用括号

  • 函数封装了独立功能,可以直接调用
    函数名(参数)
  • 方法和函数类似,同样是封装了独立的功能
  • 方法需要通过对象来调用,表示针对这个对象要做的操作
    对象.方法名(参数)

在变量后面输入.,然后选择针对这个变量要执行的操作,记忆起来比函数要简单很多

1.3、循环遍历

  • 遍历就是从头到尾依次从列表中获取数据
    • 在循环体内部针对每一个元素,执行相同的操作
  • Python中为了提高列表的遍历效率,专门提供的迭代iteration遍历
  • 使用for就能够实现迭代遍历
点击查看代码
# for循环内部使用的变量 in 列表
for name in name_list:
    循环内部针对列表元素进行操作
    print(name)

应用场景

  • 尽管Python的列表中可以存储不同类型的数据
  • 但在开发中,更多的应用场景是
    • 列表存储相同类型的数据
    • 通过迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作

2、元组

2.1、元组的定义

  • Tuple(元组)与列表类似,不同之处在于元组的元素不能修改
    • 元组表示多个元素组成的序列
    • 元组在Python开发中,有特定的应用场景
  • 用于存储一串信息,数据之间使用分隔
  • 元组用()定义
  • 元组的索引从0开始
    • 索引就是数据在元组中的位置编号
      创建空元组
      tuple = ()
      元组中只包含一个元素时,需要再元素后面添加逗号
      info_tuple = (10,)

2.2、元组常用操作

  • 在python中定义一个元组,例如:info=()
  • 输入info.按下TAB键,python会提示元组能够使用的函数如下:
    info.count info.index

2.3、循环遍历

  • 取值就是从元组中获取存储在指定位置的数据
  • 遍历就是从头到尾依次从元组中获取数据
点击查看代码
# for 循环内部使用的变量 in 元组
for item in info:
    循环内部针对元组进行操作
    print(item)

> 在Python中,可以使用`for`循环遍历所有非数字型类型的变量:列表、元组、字典以及字符串

2.3、应用场景

  • 尽管可以使用for in遍历元组
  • 但是在开发中,更多的应用场景是:
    • 函数的参数和返回值,一个函数可以接收任意多个参数,或者一次返回多个数据
    • 格式字符串,格式化字符串后面的()本质上就是一个元组
    • 让列表不可以被修改,以保护数据安全
点击查看代码
# 格式化字符串后面的`()`本质上就是元组
info = ("zhangsan",18)
print("%s 的年龄是 %d" % info)

info_str="%s 的年龄是 %d" % info
print(info_str)

元组和列表之间的转换

  • 使用list函数可以把元组转换成列表
    list(元组)
  • 使用tuple函数可以把列表转换成元组
    tuple(列表)

3、字典

3.1、字典的定义

  • dictionary(字典)是除列表以外Python之中最灵活的数据类型
  • 字典同样可以用来存储多个数据
    • 通常用于存储描述一个物体的相关信息
  • 和列表的区别
    • 列表是有序的对象集合
    • 字典是无序的对象集合
      *字典用{}定义
      *字典使用键值对存储数据,键值对之间使用,分隔
    • key是索引
    • value是数据
    • 键和值之间使用:分隔
    • 键必须是唯一的
    • 值可以取任何数据类型,但键只能使用字符串、数字或元组
点击查看代码
xiaoming={"name":"小明",
          "age":"18",
          "gender":True,
          "height":1.75}

### 3.2、字典的常用操作

点击查看代码
# 使用多个键值对,存储描述一个物体的相关信息,描述更复杂的数据信息、
# 定义一个字典
a_dict = {"name":"小明"}
# 1.取值
print(a_dict["name"])
# 2.新增/修改
# 如果key不存在,会新增键值对
a_dict["age"] = 18
# 如果key存在,会修改已存在的键值对
a_dict["name"] = "小小明"
# 4.删除 a_dict.prop("name");如果key不存在,则程序报错

# 将多个字典放到一个列表中再进行遍历
card_list = [
    {
        "name" : "张三",
        "phone" : "123456",
        "qq" : "123456"
    },
    {
        "name" : "李四",
        "phone" : "10086",
        "qq" : "789101112"
    }
]
for card_info in card_list:
    print(card_info)

xiaoming_dict={"name" : "小明","age" : 18}
# 1.统计键值对数量
print("字典长度:%d" % len(xiaoming_dict))

# 2.合并字典
temp_dict = {"height" : 1.75,"age" : 20}
# 注意:如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对
xiaoming_dict.update(temp_dict)
print("字典内容:%s" % xiaoming_dict)

# 3.清空字典
xiaoming_dict.clear()
print("字典内容:%s" % xiaoming_dict)

3.3、循环遍历

  • 遍历就是依次从字典中获取所有键值对
点击查看代码
# for 循环内部使用的`key的变量` in 字典
for k in xiaoming:
    print("%s:%s" % (k,xiaoming[k]))

3.4、应用场景

  • 尽管可以使用for in遍历字典
  • 但是在开发中,更多的应用场景是:
    • 使用多个键值对,存储描述一个物体的相关信息 –描述更复杂的数据信息
    • 将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理
点击查看代码
card_list = [{"name":"张三",
              "qq":"1234567890",
              "phone":"13243538902"},
              {"name":"李四",
              "qq":"1234567890",
              "phone":"13243538903"}
            ]

4、字符串

4.1、字符串的定义

  • 字符串就是一串字符,是编程语言中表示文本的数据类型
  • 在Python中可以使用一对引号"或者一对单引号'定义一个字符串
    • 虽然可以使用\"或者\'做字符串的转义,但是在实际开发中:
      *如果字符串内部需要使用",可以使用'定义字符串
      *也可以使用for循环遍历字符串中每一个字符

大多数编程语言都是用"来定义字符串

点击查看代码
string = "Hello Python"
for c in string:
    print(c)

字符串统计操作

点击查看代码
# 定义字符串可用双引号或者单引号
str_1 ="hello world"
# 1.统计字符串长度
print(len(str_1))

# 2.统计某个小字符串出现的次数
print(str_1.count("llo"))
print(str_1.count("abc"))

# 3.某一个子字符串出现的位置
print(str_1.index("llo"))

4.2、 字符串的常用操作

  • 在python中定义一个字符串,列如:hello_str=""
序号 方法及描述
1 capitalize()
将字符串的第一个字符转换为大写
2 center(width, fillchar)
返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
3 count(str, beg= 0,end=len(string))
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
4 bytes.decode(encoding=”utf-8″, errors=”strict”)
Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
5 encode(encoding=’UTF-8′,errors=’strict’)
以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
6 endswith(suffix, beg=0, end=len(string))
检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
7 expandtabs(tabsize=8)
把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。
8 find(str, beg=0, end=len(string))
检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
9 index(str, beg=0, end=len(string))
跟find()方法一样,只不过如果str不在字符串中会报一个异常。
10 isalnum()
如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
11 isalpha()
如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False
12 isdigit()
如果字符串只包含数字则返回 True 否则返回 False..
13 islower()
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
14 isnumeric()
如果字符串中只包含数字字符,则返回 True,否则返回 False
15 isspace()
如果字符串中只包含空白,则返回 True,否则返回 False.
16 istitle()
如果字符串是标题化的(见 title())则返回 True,否则返回 False
17 isupper()
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
18 join(seq)
以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
19 len(string)
返回字符串长度
20 ljust(width[, fillchar])
返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
21 lower()
转换字符串中所有大写字符为小写.
22 lstrip()
截掉字符串左边的空格或指定字符。
23 maketrans()
创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
24 max(str)
返回字符串 str 中最大的字母。
25 min(str)
返回字符串 str 中最小的字母。
26 replace(old, new [, max])
把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。
27 rfind(str, beg=0,end=len(string))
类似于 find()函数,不过是从右边开始查找.
28 rindex( str, beg=0, end=len(string))
类似于 index(),不过是从右边开始.
29 rjust(width,[, fillchar])
返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
30 rstrip()
删除字符串末尾的空格或指定字符。
31 split(str=””, num=string.count(str))
以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
32 splitlines([keepends])
按照行(‘\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
33 startswith(substr, beg=0,end=len(string))
检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
34 strip([chars])
在字符串上执行 lstrip()和 rstrip()
35 swapcase()
将字符串中大写转换为小写,小写转换为大写
36 title()
返回”标题化”的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
37 translate(table, deletechars=””)
根据 table 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
38 upper()
转换字符串中的小写字母为大写
39 zfill (width)
返回长度为 width 的字符串,原字符串右对齐,前面填充0
40 isdecimal()
检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。

字符串中的转义字符

  • \t在控制台输出一个制表符,协助在输出文本时垂直方向保持对齐
  • \n在控制台输出一个换行符

制表符的功能是在不适用表格的情况下在垂直方向按列对齐文本

转义字符 描述
\ 反斜杠符号
单引号
双引号
\n 换行
\t 横向制表符
\r 回车

字符串的判断方法

点击查看代码
# 判断字符串中是否有空白字符
str_temp = "   \t\n\r"
print(str_temp.isspace())
# 判断字符串是否只包含数字
num_str = "1.1"
print(num_str)
# isdecimal只能判断单纯的数字
print(num_str.isdecimal())
# isnumeric能判断全角数字、汉字数字
print(num_str.isnumeric())
# isdigit能判断全角数字、(1)、\u00b2
print(num_str.isdigit())

字符串的查找和替换

点击查看代码
hello_str = "hello world"
# 1.判断是否以指定字符串开始
print(hello_str.startswith("hello"))
# 2.判断是否以指定字符串结束
print(hello_str.endswith("world"))
# 3.查找指定字符串
print(hello_str.find("llo"))
# find方法如果指定的字符串不存在则会返回-1
print(hello_str.find("abc"))
# 4.替换字符串
# 注意:replace方法执行完成之后,会返回一个新的字符串,不会修改原有字符串
print(hello_str.replace("world","python"))
print(hello_str)

4.3、字符串的切片

  • 切片方法适用于字符串、列表、元组
    • 切片使用索引值来限定范围,从一个大的字符串中切出小的字符串
    • 列表和元组都是有序的集合,都能够通过索引值获取到对应的数据
    • 字典是一个无序的集合,是使用键值对保存数据
      字符串[开始索引:结束索引:步长]
      注意
  • 指定的区间属于左闭右开型 [开始索引,结束索引]=>开始索引>=范围<结束索引
    • 起始位开始,到结束位的前一位结束(不包含结束位本身)
  • 从头开始,开始索引数字可以省略,冒号不能省略
  • 到末尾结束,结束索引数字可以省略,冒号不能省略
  • 步长默认为1,如果连续切片,数字和冒号都可以省略
点击查看代码
# 列表、元组、字符串都支持切片,但字典不支持切片,因为字典是无序的,没有索引
# 语法:字符串[开始索引:结束索引:步长]
temp_str = "0123456789"
# 截取索引0-2位置的字符串,不包括索引位置2
print(temp_str[:2])
# 截取索引2-结尾的字符串
print(temp_str[2:])
# 截取索引2-结尾(不包含结尾)的字符串
print(temp_str[2:-1])
# 截取索引为0并且步长为2的字符串
print(temp_str[0::2])
# 对字符串逆序
print(temp_str[-1::-1])

5、公共方法

5.1、Python内置函数

Python包含了一下内置函数:

函数 描述 备注
len(item) 计算容器中元素个数
del(item) 删除变量 del有两种方式
max(item) 返回容器中元素最大值 如果是字典,只针对key比较
min(item) 返回容器中元素最小值 如果是字典,只针对key比较
cmp(item1,item2) 比较两个值,-1小于/0 相等/1 大于 Python 3.x取消了cmp函数

注意

  • 字符串比较符合一下规则:”0″<“A”<“a”

5.2、切片

描述 Python表达式 结果 支持的数据类型
切片 “0123456789”[::-2] “97531” 字符串、列表、元组
  • 切片使用索引值来限定范围,从一个大的字符串中切出小的字符串
  • 列表和元组都是有序的集合,都能够通过索引值获取到对应的数据
  • 字典是一个无序的集合,是使用键值对保存数据

5.3、运算符

运算符 Python表达式 结果 描述 支持的数据类型
+ [1,2]+[3,4] [1,2,3,4] 合并 字符串、列表、元组
* [“Hi!”]*4 [“Hi!”,”Hi!”,”Hi!”,”Hi!”] 重复 字符串、列表、元组
in 3 in (1,2,3) True 元素是否存在 字符串、列表、元组、字典
not in 4 not in (1,2,3) True 元素是否不存在 字符串、列表、元组、字典
> >= == < <= (1,2,3)<(2,2,3) True 元素比较 字符串、列表、元组

注意

  • in在对字典操作时,判断的是字典的键
  • innot in被称为成员运算符

5.4、完整的for循环语法

  • Python中完整的for循环的语法如下:
点击查看代码
for 变量 in 集合:
    循环体代码
else:
    代码 循环结束后,会执行的代码,如果break退出循环后,不会执行else中的代码