列表与元组

前一天的补充

可变字符串

在python中字符串是不可变的,可以通过io.StringIO获取新对象,对字符串进行修改,并且地址保持不变。

// io.StringIO()
>>> s="hello word"
>>> s
'hello word'
>>> id(s)
1548270700080
>>> import io
>>> sio=io.StringIO(s)
>>> sio.getvalue()
'hello word'
>>> sio.seek(1)
1
>>> sio.write("i")
1
>>> sio.getvalue()
'hillo word'
>>> id(s)
1548270700080
>>> 
运算符优先级
  1. 乘除优先于加减
  2. 位运算符、算术运算符>比较运算符>赋值运算符>逻辑运算符
    python不支持自增(++)和自减(–)

列表

序列:一种数据的存储方式,用来存储一系列数据
结构组成:字符串、列表、元组、字典、集合

列表的创建

有两种创建方式 [],list()

// 创建列表
#第一种
>>> a=[1,2]
>>> a
[1, 2]
#第二种
>>> a=list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
列表元素的增加和删除

列表元素的增加和删除会对内存进行管理,但是涉及列表元素的大量移动,执行效率低,因此一般在尾部对元素进行增加和删除。

元素的增加

元素的增加有五种方式,attend、"+"、extend、insert、"*"。

// 元素的增加
#第一种方式,id不发生改变
>>> a=[20,30,40]
>>> id(a)
2455693377736
>>> a.append(80)
>>> a
[20, 30, 40, 80]
>>> id(a)
2455693377736
#第二种方式,id改变,执行效率低
>>> a=[20,30,40]
>>> id(a)
2455693216968
>>> a=a+[80]
>>> a
[20, 30, 40, 80]
>>> id(a)
2455682408136
#第三种方式,id不变
>>> a=[20,30,40]
>>> id(a)
2455693377800
>>> a.extend([80])
>>> a
[20, 30, 40, 80]
>>> id(a)
2455693377800
#插入
>>> a=[20,30,40]
>>> id(a)
2455693262792
>>> a.insert(2,80)
>>> a
[20, 30, 80, 40]
>>> id(a)
2455693262792
#乘法
>>> a=[20,30,40]
>>> b=a*2
>>> b
[20, 30, 40, 20, 30, 40]
>>> a
[20, 30, 40]
元素的删除

元素的删除有三种方式,del、pop、remove

// 元素的删除
#第一种方式,对数组进行了拷贝
>>> a=[20,30,40]
>>> a
[20, 30, 40]
>>> del a[1]
>>> a
[20, 40]
#第二种方式,删除并返回指定位置的元素,未指定则默认为最后一个元素
>>> a=[20,30,40]
>>> a
[20, 30, 40]
>>> a.pop()
40
>>> a
[20, 30]
#第三种方式,删除首次出现的指定元素
>>> a=[20,30,20,40]
>>> a
[20, 30, 20, 40]
>>> a.remove(20)
>>> a
[30, 20, 40]
列表元素的访问和计数

列表元素的访问可通过索引进行,与字符串类似

// 列表元素的相关操作
#元素的访问
>>> a=[20,30,20,40]
>>> a
[20, 30, 20, 40]
>>> a[1:3]
[30, 20]
#指定元素首次出现的索引位置
>>> a.index(20)
0
#对指定元素的出现个数进行计数
>>> a.count(20)
2
#判断元素是否在列表中
>>> 20 in a
True
>>> 50 in a
False
列表的切片

与字符串的相关运算相似

列表排序

对列表内的元素进行排序有三种方式,sort()、sorted()、reversed()

// sort()
#升序
>>> a=[20,30,60,40,10]
>>> a
[20, 30, 60, 40, 10]
>>> a.sort()
>>> a
[10, 20, 30, 40, 60]
#降序
>>> a.sort(reverse=True)
>>> a
[60, 40, 30, 20, 10]
#打乱顺序
>>> import random
>>> random.shuffle(a)
>>> a
[30, 20, 10, 40, 60]
// sorted()
>>> a=[20,30,60,40,10]
>>> sorted(a)
[10, 20, 30, 40, 60]
// reversed() 返回迭代器,不对原列表做修改,只是返回一个逆序排列的迭代器对象,只能使用一次
>>> a=[20,30,60,40,10]
>>> a
[20, 30, 60, 40, 10]
>>> b=reversed(a)
>>> b
<list_reverseiterator object at 0x0000024F78DC6860>
>>> list(b)
[10, 40, 60, 30, 20]
>>> list(b)
[]

多维列表

一维列表为[],二维列表为[[],[], ],对列表进行嵌套。下边为对二维列表的访问。

// 二维列表的访问
>>> a=[10,20,[30,40]]
>>> a
[10, 20, [30, 40]]
>>> a[0]
10
>>> a[2]
[30, 40]
>>> a[2][0]
30
>>> a[2][1]
40

元组

元组是不可变序列,它的访问速度和处理速度比列表快

元组的创建

有两种创建方式 ()、tuple()

// 元组的创建
#第一种方式
>>> a=(20,30,60,40)
>>> a
(20, 30, 60, 40)
>>> a=20,30,60,40
>>> a
(20, 30, 60, 40)
>>> type(a)
<class 'tuple'>
#第二种方式
>>> a=tuple("abcde")
>>> a
('a', 'b', 'c', 'd', 'e')
>>> type(a)
<class 'tuple'>
元组的删除、访问、计算和排序

与列表的运算类似,删除使用del,但与列表不同的是元组的元素不能改变。并且元组在排序时只能使用sorted。

// 元素的修改
#列表元素可以改变
>>> a=[20,30,50]
>>> a
[20, 30, 50]
>>> a[0]="g"
>>> a
['g', 30, 50]
#元组元素不可改变
>>> a=20,30,50
>>> a[0]="g"
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    a[0]="g"
TypeError: 'tuple' object does not support item assignment
生成器推导式创建元组

生成器推导式创建元组只能用一次

// 创建元组
>>> a=(x for x in range(5))
>>> a
<generator object <genexpr> at 0x00000267063D6F10>
>>> tuple(a)
(0, 1, 2, 3, 4)
>>> list(a)
[]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值