今天的课程主要针对部分数据类型的内置方法进行了讲解,包括列表、元组、字典以及集合。

下面详细对以上提到的几种数据类型进行讲解。

列表数据类型的内置方法

作用

可以使用列表存储多个元素,如兴趣爱好。

列表既可以存数据,也可以取数据。

定义方式

元素之间以,号隔开。元素可以是任意类型的数据。

hobby_list = ['run','read','sleep']

优先掌握的方法

  1. 索引取值(正向取值 + 反向取值)
  hobby_list[0]
  1. 切片
  hobby_list[:2]	# ['run','read']
hobby_list[-2:] # ['read','sleep']
hobby_list[-1:-3:-1] #['sleep','read']
  1. 长度
  len(hobby_list)
  1. 成员运算 innot in
  print('run' in  hobby_list) # 打印 True,因为'run' 在列表内
print('hh' not in hobby_lst) # 打印 True,“hh”不在列表内,因为使用了 not in,所以为 True
  1. 追加 append
  hobby_list.append('swimmng') # 在列表的最后添加一个值
  1. 删除del
  # 想要删除指定的元素,将对应元素的索引值传入即可。没有对应的索引时会报错
hobby_list.pop() # 默认删除列表中最后一个元素,默认值为-1
hobby_list.pop(2) # del 根据索引删除对应的元素,没有对应的索引时会报错
del hobby_list[2]
print(hobby_list) # remove 删除一个元素,如果不存在则报错
hobby_list.remove('sleep')
  1. 循环
  for i in hobby_list:
print(i)

需要掌握的方法

  1. insert 在索引的前面插入一个值

    hobby_list.insert(1,'shopping')
    
    
  2. count 获取指定元素的个数

    hobby_list.count('run') # 获取‘run’元素在hobby_list列表中出现的次数
    
    
  3. index 获取指定元素的索引,但是只会获取第一次

    # 获取‘run’元素在hobby_list列表中首次出现的位置的索引。
    hobby_list.index('run')
  4. clear 清空列表

    hobby_list.clear()
    print(hobby_list) # hobby_list列表已经被清空,打印空列表
  5. copy 复制(浅拷贝)

如果l2是l1的浅拷贝对象,当l1内的可变元素发生变化时,l2也跟着变化。当l1内的不可变元素发生变化时,l2不变化。

​```Python
lis1 = hobby_list.copy() # 浅拷贝
print(lis1)
​```
  1. extend 扩展,把extend里的列表的元素添加到原列表中

    lis1 = [1,2,3]
    lis2 = [4,2,3]
    lis1.extend(lis2)
    print(lis1) # lis1打印的结果为[1,2,3,4,2,3]
  2. reverse 反转列表

    hobby_list = ['run','read','sleep']
    hobby_list.reverse()
    print(hobby_list) # 打印结果为 ['sleep','read','run']
  3. sort 对列表进行排序

    hobby_list.sort() # 排序,需要注意的是,使用sort进行排序的列表的元素必须是同类型的
    
    

列表可以存多个值,并且为有序序列。属于可变数据类型,因为它内部的元素变化时,列表的ID地址并没有变,索引它是可变数据类型。

元祖类型的内置方法

作用

类似于列表,可以取数据,但是无法修改数据

定义方式

在()内以,逗号分隔任意类型的元素

优先掌握的方法(参考列表方法)

  1. 索引取值
  2. 切片
  3. 长度
  4. 成员运算
  5. for循环
  6. count
  7. index

元组可以存多个值,并且按照一定的顺序进行排列,是有序序列。因为元组内部的元素不允许修改,也就不存在可变不可变这一说。

字典类型的内置方法

作用

当存储的数据量太大时,可以使用字典进行存取

定义方式

在{}内以号分隔key:value形式的元素。key必须具有可描述性,为不可变数据类型,一般为字符串。value可以为任意数据类型的数据。

优先掌握的方法

  1. 按键取值,可存可取
  2. 长度
  3. keys/values/items 去所有的值取出当成列表
# 循环打印所有的keys值
for i in dict.keys:
print(i) # 循环打印所有的values值
for i in dict.values:
print(i) # 循环打印所有的键值对
for k,v in dict.items():
print(k,v)
  1. for 循环
  2. 成员运算 比较的是key
  3. del 删除

需要掌握的方法

  1. fromkeys

    默认把给定列表内的元素取出来当成key,然后使用一个默认value新建一个字典
# 新建一个字典,在原字典的基础上根据给出的key和默认值新增元素。如果键已存在,则覆盖key之前的value值。不存在,则新增。
dic1 = {1: 'o', 2: 'or'}
dic2 = dic1.fromkeys([1, 2, 3], '默认值')
print(dic2)
  1. get 如果键不存在,返回None,不会报错;如果键不存在,可以给定默认值
  dic1 = {1: 'o', 2: 'or'}
dic1.get(3) #
  1. update 有就更新,没有则添加

    dic1 = {1: 'o', 2: 'or'}
    dic1.update({1:'t',3:'k'})
    print(dic1)
  2. setdefault 如果字典中有该key的话,则key对应的值不变;如果没有,则增加

kingzong_info_dict.setdefault('a', 'b')
kingzong_info_dict.setdefault('height', 'b')
print(kingzong_info_dict)
print('*' * 50)

当我们需要存储大量数据的时候,优先使用字典类型进行存储。字典类型可以存多个值

字典是通过键key取值,没有索引,所以字典属于无序序列。

字典属于可变数据类型,当字典含有的键值对中的值变化时,字典的内存地址不变。

集合类型内置方法

首先集合类型是可以存储多个值的,为了集合之间做运算(如求交集、并集、差集等等)

定义方式

我们一般定义集合类型是使用下面两种方式

s = set()
s = {1,2,3} # 不能使用下面的方式,这是表示空字典
s = {}

优先掌握的方法

  1. 去重

去重的同时,打乱了列表元素原有的顺序

  1. 并集 |
  2. 交集 &
  3. 差集 -
  4. 对称差集 ^
  5. 父集 >>=
  6. 子集<<=
  7. ==

需要掌握的方法

  1. add 添加元素

  2. difference_update

    pythoner = {'fanping', 'wangdapao', 'wangwu', 'zhaoliu', 'zhangsan', 'wangba'}
    linuxer = {'ruiixng', 'lisi', 'wangba', 'wangdapao'}
    pythoner.difference_update(linuxer)
    print(pythoner)
    print('*' * 50)
  3. isdisjoint

    print(pythoner.isdisjoint(linuxer))
    print('*' * 50)
  4. remove #移除,值不存在会报错

  5. discard #删除,值不存在不会报错

集合类型可以存多个值。当定义一个集合时,其内部的元素是无序排列的。集合类型可以存储任意类型的元素,当元素发生变化时,集合的内存地址不变,即集合为可变数据类型。

布尔类型

作用

一般用于逻辑判断,除了0、None、空和False自带布尔值False外,其他的数据类型自带布尔值为True。

数据类型总结

可变、不可变的判断方式:

值变ID不变的数据类型为可变数据类型

值变ID也变的数据类型为不可变数据类型

知识拓展

  • 拷贝、浅拷贝、深拷贝都是针对可变数据类型而言
l1 = ['a','b','c',['d','e','f']]
l2 = l1 l1.append('g') print(l1) # ['a','b','c',['d','e','f'],'g']
print(l2) # ['a','b','c',['d','e','f'],'g']

拷贝

我们一般的赋值操作都是这个拷贝

总结:如果l2是l1的拷贝对象,当l1内部的任何数据类型的元素变化时,l2内部的元素也随之变化。因为可变类型值变ID不变

浅拷贝

需要使用copy模块

import copy 

l1 = ['a','b','c',['d','e','f']]
l2 = copy.copy() l1.append('g') print(l1) # ['a','b','c',['d','e','f'],'g']
print(l2) # ['a','b','c',['d','e','f']] l1[3].append('g') print(l1) # ['a','b','c',['d','e','f','g'],'g']
print(l2) # ['a','b','c',['d','e','f','g']]

总结:如果l2是l1的浅拷贝对象,则l1内的不可变元素发生改变,l2不变。如果l1内的可变元素发生变化时,则l2也跟着改变。

深拷贝

import copy

l1 = ['a','b','c',['d','e','f']]
l2 = copy.deepcopy(l1) l1.append('g') print(l1) # ['a','b','c',['d','e','f'],'g']
print(l2) # ['a','b','c',['d','e','f']] l1[3].append('g') print(l1) # ['a','b','c',['d','e','f','g'],'g']
print(l2) # ['a','b','c',['d','e','f']]

总结:如果l2是l1的深拷贝对象,则当l1内的不可变元素发生变化时,l2不变;当l1内的可变元素发生变化时,l2不变。即l2永远不会因为l1的变化而发生变化

附图(灵魂画师提供)

拷贝示意图

浅拷贝示意图

深拷贝

三者合一

至尊无敌超级VIP联合版

day007 列表类型、元祖类型、 字典类型、 集合类型的内置方法的更多相关文章

  1. 干货!Python中字符串、列表、元祖、字典,集合之间的转换

    一.字符串的转化 1.字符串转换成列表 字符串转换成list 的时候,str可以作为迭代对象,直接放入:也可以使用split对字符串进行切割.然后返回list s = '1a1b1c' print(l ...

  2. python基础--列表、元祖、字典、集合

    列表(List) 1.列表特点 列表是可变的!! list 是一种有序的序列,可以添加.删除其中的元素,并且可以通过下标(索引)访问 数据 2.简单的常用操作 A.通过下表访问元素 print(lis ...

  3. python基础知识之列表、元祖、字典、集合、字符串。

    1.可变类型之列表 列表用 [ ]来定义是可变的,可以通过索引值来去查询里面的字段可以可以追加,删除等 names='zhangyang guyun xiangpeng xuliangwei' nam ...

  4. Python——列表、元祖、字典、集合的基本操作

    列表 1. 列表——增 (1)append li = ['xcsd', 'cdc', [1, 5, 2], 'eht', '辛辰'] li.append('nihao') print(li) #['x ...

  5. Python--数据类型与变量(列表、元祖、字典)

    今天我们来看Python中3种內建的数据结构:列表.元祖和字典 列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素特性:1.可存放多个值2.可修改指定索引位置对应的值,可变 ...

  6. day3-创建列表、元祖、字典

    创建列表.元祖.字典 创建列表 name_list = ['alex', 'seven', 'eric'] 创建元祖 ages = (11, 22, 33, 44, 55) 创建字典 person = ...

  7. Python eval() 的使用:将字符串转换为列表,元祖,字典

    eval() 函数用来执行一个字符串表达式,并返回表达式的值. 语法 以下是 eval() 方法的语法: eval(expression[, globals[, locals]]) 参数 expres ...

  8. Python之旅第四天(列表、元祖、字典和习题)

    第四天,感觉时间还是过得很快,今天内容确实有点多,关于list的方法实在是太多了,元组tuple感觉有点鸡肋,可能得到后面才知道他的作用吧,然后是字典,看了很多关于字典的介绍,但是这货到底是干啥用的一 ...

  9. Python基础-列表、元祖、字典、字符串

    列表和分组 序列概览: 数据结构是通过某种方式组织在一起的数据元素的集合.这些元素可以是数字.字符,甚至可以是其他数据结构. 在python中,最基本的数据结构是序列(sequence). 序列中的每 ...

  10. Python基础(3)_可变对象与不可变对象、列表、元祖和字典

    可变对象与不可变对象 实例被创建后,身份和类型是不可变的, 如果值是不可以被修改的,则是不可变对象 如果值是可以被修改的,则是可变对象 #在id不动,type也不动,value被修改了,则称为可变 # ...

随机推荐

  1. hdu_1056_HangOver_201311071354

    HangOver Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  2. Java端百度云推送消息Demo

    因为在做Java服务器有用到推送消息机制,于是到网上找了一下,就自己试着敲了一个demo.这个demo主要是简单的一个对app消息推送. jar:百度云消息推送Java端的jar. package x ...

  3. assign retain 和copy的区别

    assign 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等 等. 此标记说明设置器直接进⾏行赋值,这也是默认值.在使⽤用垃圾 ...

  4. 使用resultMap实现ibatis复合数据结构查询(1.多重属性查询;2.属性中含有列表查询)

    以订单为例(订单详情包括了订单的基本信息,配送物流信息,商品信息),直接上代码: 1.多重属性查询 java实体 public class OrderDetail { @XmlElement(requ ...

  5. AOP代理分析

    一:代理 代理类和目标类实现了同样的接口.同样的方法. 假设採用工厂模式和配置文件的方式进行管理,则不须要改动client程序.在配置文件里配置使用目标类还是代理类,这样以后就非常easy切换.(比如 ...

  6. 大数据处理之道(实验方法&lt;二&gt;)

    一:交叉验证(crossvalidation)(附实验的三种方法)方法简单介绍   (1) 定义:交叉验证(Cross-validation)主要用于建模应用中,比如PCR(Principal Com ...

  7. 【POJ 3322】 Bloxorz I

    [题目链接] http://poj.org/problem?id=3322 [算法] 广度优先搜索 [代码] #include <algorithm> #include <bitse ...

  8. 机器人走迷宫(dfs)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1590 #include <stdio.h ...

  9. ZOJ2477 Magic Cube

    题目: This is a very popular game for children. In this game, there's a cube, which consists of 3 * 3 ...

  10. ROS-URDF-物理属性

    前言:介绍向连杆添加碰撞和惯性属性,以及向关节添加动力学. 参考自:http://wiki.ros.org/urdf/Tutorials/Adding%20Physical%20and%20Colli ...