内置数据结构列表与元组

1.序列

成员有序排列的,且可以通过下标偏移量访问到它的一个或几个成员,这种类型统称为序列。

  • 序列数据类型包括:字符串,列表,元组类型
  • 特点:都支持如下特性
  • 连接操作符(+)&重复操作符(*)
  • 成员关系操作符(in,not in )
  • 索引与切片

2.列表,打了激素的数组

1.列表的创建

数组: 存储同一种数据类型的集合
列表: 可以存储任意数据类型的集合
创建空列表:
list=[]
如:list=[]
print(list,type(list))
[ ] <class ’ list’>
type( ) 查询某个字段的数据类型
创建一个包含元素的列表,元素可以是任意类型的数据:
包括数值、字符串、也可以是列表、嵌套列表
如果一个列表有5个元素,当索引list[10:] 时不会报错,但是会输出[ ],一个空列表,值得注意

2.列表的特性:索引,切片,连接操作符(+),重复操作符(*),成员操作符(in, not in )

与字符串相同

3.列表的其他特性:列表是可变的数据类型

不同于字符串的不可变数据类型的特性
比如:list1=[1,2,3]
list[0]=2
则此时list=[2,2,3]
前后的id是不变的

4.列表的增、删、改、查

1.增:(append)追加,(insert)插入,(extend)扩展

  • list.append(object):给列表list中追加一个对象object,只能一个一个的追加到最后
  • list.insert(index,obeject):给列表list的指定位置index,插入一个对象object
  • list.extend(object):给列表list追加多个对象
  • li = [1, 2, 3, 4]
  • li.append(7)
  • print(li) [1, 2, 3, 4, 7] #末尾追加元素7
  • li.insert(0, ‘python’)
  • print(li) [‘python’, 1, 2, 3, 4, 7] #在第0个元素处插入元素python
  • li.extend([6, 7, 8, 9])
  • print(li) [‘python’, 1, 2, 3, 4, 7, 6, 7, 8, 9] #在列表扩展几个元素6,7,8,9

2.删:(remove)、(del)、(clear)清空、(pop)弹出

  • list.remove(object):删除列表中指定的元素,不反悔任何值
  • list.pop(index):删除列表中指定索引的元素,并且返回被删除的元素的值,若不指定则默认删除列表中最后一位元素
  • del list[1:] / del list[o] 删除列表中指定索引的值,或者切片,不返回值
  • list.clear() 清空列表

3.改(索引)、(切片)

修改列表的元素:直接重新赋值
list=[1,2,3,4]
list[0]=0
list=[0,2,3,4]

4.查(count)、(index)

-list.index(object) 返回list中某个元素对应的索引

  • list.count(object) 返回list中某个对象object出现的次数

5.其他操作(copy)复制、(sort)排序(默认从小到大)、(reverse)反转、(random)随机

  • li = [‘python’, 1, 2, 3, 4, 7, 6, 7, 8, 9]
  • import random
  • li = list(range(10))
  • random.shuffle(li)
  • print(li) [7, 0, 3, 4, 2, 1, 5, 6, 9, 8]
  • li1 = li.copy() #[:]
  • print(li, li1) [7, 0, 3, 4, 2, 1, 5, 6, 9, 8] [7, 0, 3, 4, 2, 1, 5, 6, 9, 8]
  • li.reverse() #[::-1]
  • print(li) [8, 9, 6, 5, 1, 2, 4, 3, 0, 7]
  • li.sort()
  • print(li) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

6.总结

在这里插入图片描述

3.元组:带了紧箍咒的列表

1.元组的定义

  • 元组也是一种序列,所以支持序列的基本操作:索引、切片、连接操作符、重复操作符、成员操作符
  • 元组使用()来界定
  • 元组各元素之间用逗号隔开
  • 元组不支持修改或删除所包含的元素
  • 如果要修改可以使用list()函数将它转换为列表,在列表上进行修改删除元组中的元素
  • 使用tuple()函数将其它数据类型转换为元组类型
  • 虽然元组不能修改,但是如果元组中含有的元素为列祖,则这个元素可以修改。======例如,元组a=(‘Tim’,201607,[‘Python’,71]),其中a[1]=201607是整型数据,元组a不能修改a[1];a[2]=[‘Python’,71]是列表,元组a可以修改a[2][1]。元组a的第三个元素为列表,列表的内容是允许改变的,它的内存位置并没有变化。

2.元组的创建、删除、特性

  • 定义空元组 tuple=()
  • 定义单个值得元组 tuple=(1)
  • 一般得元组 tuple=(1,‘1’,male)
    元组和列表一样,可以存放任意数据类型得数据,不同得是,元组是不可变数据类型,列表是可变数据类型

3.元组的内置方法(index)、(count)

t.count(value) 返回元组中某个元素出现的次数
t.index(value) 返回元组中某个值的索引

4.元组赋值应用(有多少个元素,就用多少个变量接收)

特性1:对元组分别赋值,引申对多个变量页可以通过元组方式分别赋值

如:
num1,num2,num3=1,2,3
print(num1,num2,num3)------>1 2 3

特性2:元组两边的小括号可加可不加

如:
x,y,z=1,2,3
等价于
(x,y,z)=(1,2,3)

特性3:交换变量,无需中间变量即可交换

如:
x=2,y=1;
x,y=y,x
print(x,y)---->1,2

特性4:print打印

如:
print(“name: %s, age:%d, gender: %s” %(‘fentiao’, 10, ‘male’))
t = (‘fentiao’, 10, ‘male’)
print(“name: %s, age:%d, gender: %s” %(t[0], t[1], t[2]))
print(“name: %s, age:%d, gender: %s” %t)
#结果为:
name: fentiao, age:10, gender: male
name: fentiao, age:10, gender: male
name: fentiao, age:10, gender: male

4.命名元组:namedtuple

1.定义

  • namedtuple比tuple功能更大强大
  • collections.namedtuple(typename.field_name)
  • typename:类名称
  • field_names:元组中元素的名称

  • 命名元组是一个类,有两种方式来定义命名元组
  • 实例化命名元组,获得类的一个实例
  • 访问命名元组:通过逗号运算符和属性名来访问元组字段的值:user.name;user.age;user.id

如:
#从collections模块中导入namedtuple命名元组类
from collections import namedtuple
#创建一个类, 类名为AccountInfo ,元组里面包含两列信息, 分别是’name’, ‘password’
AccountInfo = namedtuple(‘AccountInfo’, [‘name’, ‘password’])
#实例化对象
root_account = AccountInfo(‘root’,‘westos’)
print(root_account.name)
print(root_account.password)
#类属性 _fields:包含这个类所有字段名的元组print(root_account._fields)
#结果为:rootwestos(‘name’, ‘password’)

2.命名元组的属性

1 命名元组类的属性和方法

  • 类属性_fields:包含这个类所有字段名的元组
  • 类方法_make(iterable):接受一个可迭代对象来生产这个类的实例

2.命名元组实例的方法

  • 实例方法_asdict():把具名元组以转换成字典
  • 实例方法_replace():用于修改实例的属性
  • #获取实例的属性:
  • print( user.name, user.sex, user.age)
  • #使用 _replace() 修改对象属性
  • user = user._replace(age=22)#User(name=‘user1’, sex=‘male’, age=22)
  • #使用 _asdict()函数把 User对象转换成字典
  • print( user._asdict() ) # OrderedDict([(‘name’, ‘Runoob’), (‘sex’, ‘male’), (‘age’, 22)])

5.is和==的区别

  • Python中对象的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。
  • is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同
  • ==用来比较判断两个对象的value(值)是否相等;(type和value)
  • is也被叫做同一性运算符, 会判断id是否相同;(id, type 和val

6.浅拷贝和深拷贝

浅拷贝(li.copy())

对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值

  • 公用一个值;
  • 这两个变量的内存地址一样
  • 对其中一个变量的值改变,另外一个变量的值也会改变;

深拷贝(copy.deepcopy())

一个变量对另外一个变量的值拷贝。

  • 两个变量的内存地址不同
  • 两个变量各有自己的值,且互不影响
  • 对其任意一个变量的值的改变不会影响另外一个
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值