序列:字符串、列表、元组、字典、集合
目录
一.列表
1.列表简介
用于存储任意数目、任意类型的数据集合。列表中的元素可以各不相同,可以是任意类型。Python 的列表大小可变,根据需要随时增加或缩小。
2.列表的创建
- 基本语法[ ]创建,中间的每个对象都要用逗号隔开
a=[1,2,3,"lhx"]
>>> a=
SyntaxError: invalid syntax
>>> a
[1, 2, 3, 'lhx']
- list()创建:使用 list()可以将任何可迭代的数据转化成列表。
a
[1, 2, 3, 'lhx']
>>> a=list()
>>> a
[]
>>> a=list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b="林海馨真好看"
>>> c=list(b)
>>> c
['林', '海', '馨', '真', '好', '看']
>>> d=list("林海馨太好看了吧!")
>>> d
['林', '海', '馨', '太', '好', '看', '了', '吧', '!']
- range()创建整数列表:range()可以帮助我们非常方便的创建整数列表,这在开发中及其有用。range([start,] end [,step])
start 参数:可选,表示起始数字。默认是 0 end
end参数:必选,表示结尾数字。
step 参数:可选,表示步长,默认为 1
range()生成的是range对象,需要用list()将其转化成列表
a=list(range(30,10,-2))
>>> a
[30, 28, 26, 24, 22, 20, 18, 16, 14, 12]
>>>
3.推导式生成列表
简单介绍一下,在控制语句处将详细解视。使用推导式产生列表非常方便。
>>> a=(x*3 for x in range(100) if x%5==0)
>>> a
<generator object <genexpr> at 0x03A536F0>
>>> list(a)
[0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285]
>>>
4.列表元素的增加
除非必要,我们一般只在列表的尾部添加元素 或删除元素,这会大大提高列表的操作效率。
- append()方法:原地修改列表对象,是真正的列表尾部添加新的元素,速度最快,推荐使用
增加方法需要在列表中使用时,直接通过列表对象调用即可。前字符串也相同。
a=[10,20,50,78]
>>> a.append("林海馨真好看呀!")
>>> a
[10, 20, 50, 78, '林海馨真好看呀!']
>>>
- +运算符操作:并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次 复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。
直接使用加号使得需要添加的对象加入即可。
>>> b=["林海馨太好看了!"]
>>> id(b)
54954152
>>> b=b+["那是肯定的!"]
>>> b
['林海馨太好看了!', '那是肯定的!']
>>> id(b)
61148392
- extend()方法:将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象。
d=[40,50]
>>> id(d)
56977384
>>> d=d.extend(60,70)
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
d=d.extend(60,70)
TypeError: extend() takes exactly one argument (2 given)
>>> d=d.extend([60,70])
>>> id(d)
1561939176
- insert()插入元素:使用 insert()方法可以将指定的元素插入到列表对象的任意制定位置。这样会让插入位置后 面所有的元素进行移动,会影响处理速度。
>>> b=["林海馨真好看","说的对","!","!","!","!"]
>>> b.insert(2,"嗯嗯!")
>>> b
['林海馨真好看', '说的对', '嗯嗯!', '!', '!', '!', '!']
>>>
- 乘法扩展
和字符串中*的使用方法一致。适用于乘法的还有字符串和元组。
>>> a=["林海馨真好看!","说的对!"]
>>> b=a*3
>>> b
['林海馨真好看!', '说的对!', '林海馨真好看!', '说的对!', '林海馨真好看!', '说的对!']
>>>
5.列表元素的删除
- del 删除:删除列表指定位置的元素
此方法不能使用列表进行调用,直接使用该方法即可
>>> b.del[4]
SyntaxError: invalid syntax
>>> del b[4]
>>> b
['林海馨真好看!', '说的对!', '林海馨真好看!', '说的对!', '说的对!']
>>>
- pop()方法
pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。
>>> a=["林海馨真好看","说的对","!","!","!","!"]
>>> a.pop(1)
'说的对'
>>> a
['林海馨真好看', '!', '!', '!', '!']
>>>
- remove()方法
删除首次出现的指定元素,若不存在该元素抛出异常
>>> a=["林海馨真好看","说的对","!","!","!","!"]
>>> b=a*3
>>> b
['林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!']
>>> b.remove("说的对")
>>> b
['林海馨真好看', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!']
>>> b.remove("说的对!")
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
b.remove("说的对!")
ValueError: list.remove(x): x not in list
>>>
6.列表元素访问和计数
- 通过索引直接访问元素
可以通过索引直接访问列表,若超过范围则报错
>>> b[1]
'!'
>>> b[0]
'林海馨真好看'
>>> b[6]
'说的对'
>>>
- index()获得指定元素在列表中首次出现的索引
可以获得指定元素首次出现的索引,语法是:index(value,[start,[end]])。其中, start 和 end 指定了搜索的范围。
a=["林海馨真好看","说的对","!","!","!","!"]
>>> b=a*4
>>> b
['林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!']
>>> b.index("林海馨真好看",[7,24])
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
b.index("林海馨真好看",[7,24])
TypeError: slice indices must be integers or have an __index__ method
>>> b.index("林海馨真好看",7,24)
12
>>>
- count()获得指定元素在列表中出现的次数
返回指定元素在列表中出现的次数
>>> b.count("!")
16
>>> b
['林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!']
- len()返回列表长度
>>> b
['林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!']
>>> len(b)
24
- 成员资格判断
" "in[ ]
>>> b
['林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!']
>>> len(b)
24
>>> "林海馨真好看" in b
True
- 切片操作:适用于列表、元组、字符串
和字符串的切片操作相同,可以快速提取子列表。标准格式为: [起始偏移量 start:终止偏移量 end[:步长 step]]。
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始 偏移量小于 0 则会当做 0,终止偏移量大于“长度-1”会被当成”长度-1”。
b["林海馨真好看","说的对","!","!","!","!"]
b=b*4
>>> b[:]
['林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!', '林海馨真好看', '说的对', '!', '!', '!', '!']
>>> b[3:23:-1]
[]
>>> b[3:23:2]
['!', '!', '说的对', '!', '!', '说的对', '!', '!', '说的对', '!']
>>> b[::-1]
['!', '!', '!', '!', '说的对', '林海馨真好看', '!', '!', '!', '!', '说的对', '林海馨真好看', '!', '!', '!', '!', '说的对', '林海馨真好看', '!', '!', '!', '!', '说的对', '林海馨真好看']
>>> b[-3:]
['!', '!', '!']
>>> b[-5:-3]
['说的对', '!']
>>>
7.列表的遍历
后续补充
8.列表排序
- 修改原列表,不建新列表的排序
注意:True的T一定要进行大写,否则不能显示
a=[10,20,30,75,89,56,110,12,33]
>>> id(a)
57934600
>>> a.soet()
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
a.soet()
AttributeError: 'list' object has no attribute 'soet'
>>> a.sort()
>>> a
[10, 12, 20, 30, 33, 56, 75, 89, 110]
>>> id(a)
57934600
>>> a.sort(reverse=true)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
a.sort(reverse=true)
NameError: name 'true' is not defined
>>> a.sort(reverse=True)
>>> a
[110, 89, 75, 56, 33, 30, 20, 12, 10]
>>> id(a)
57934600
>>>
- 建新列表的排序
我们也可以通过内置函数 sorted()进行排序,这个方法返回新列表,不对原列表做修改
>>> a=sorted(a)
>>> a
[10, 12, 20, 30, 33, 56, 75, 89, 110]
>>> id(a)
11463752
>>> b=sorted(a,reverse=True)
>>> b
[110, 89, 75, 56, 33, 30, 20, 12, 10]
>>> id(b)
11464168
>>>
- reversed()返回迭代器
内置函数 reversed()也支持进行逆序排列,但是返回的是迭代器对象。
c=reversed(a)
>>> c
<list_reverseiterator object at 0x00AD8700>
>>> list(c)
[110, 89, 75, 56, 33, 30, 20, 12, 10]
>>> list[c]
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
list[c]
TypeError: 'type' object is not subscriptable
>>> list(c)
[]
9.列表相关的其他内置函数汇总
- max 和 min
- sum
b=[10,20,30,75,89,56,110,12,33]
>>> max(b)
110
>>> min(b)
10
>>> sum(b)
435
10.多维列表
二维列表可以用来存储表格
a=[
["林海馨","女","18","研一"],
["任国亮","男","20","研一"],
["张倩","女","18","研一"]
]
>>> a
[['林海馨', '女', '18', '研一'], ['任国亮', '男', '20', '研一'], ['张倩', '女', '18', '研一']]
>>> a[0][1]
'女'
for m in range(3):
for n in range(4):
print(a[m][n],end="\t")
print()
林海馨 女 18 研一
任国亮 男 20 研一
张倩 女 18 研一
二.元组
1.元组的创建
列表属于可变序列,可以任意修改列表中的元素。元组属于不可变序列,不能修改元组中的 元素。因此,元组没有增加元素、修改元素、删除元素相关的方法。
- 通过()创建元组
注意:如果元组只有一个元素,则必须后面加逗号。这是因为解释器会把(1)解释为整数 1,(1,) 解释为元组。
>>> a=(1)
>>> type(a)
<class 'int'>
>>> a=(1,)
>>> type(a)
<class 'tuple'>
- 通过 tuple()创建元组
>>> b=tuple()
>>> b=tuple("abc")
>>> type(b)
<class 'tuple'>
>>> tuple(range(10))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> b=tuple(["林海馨"])
>>> b
('林海馨',)
>>>
2.元组的元素访问和计数
元组的元素访问和列表一致,可以使用slice切片的方法
>>> a=(10,50,648,789,12,55,77,64,72,112)
>>> a[1]
50
>>> a[1:6]
(50, 648, 789, 12, 55)
>>> sorted(a)
[10, 12, 50, 55, 64, 72, 77, 112, 648, 789]
3.zip
zip(列表 1,列表 2,...)将多个列表对应位置的元素组合成为元组,并返回这个 zip 对象。
a=("林")
>>> b=("海")
>>> c=("馨")
>>> d=zip(a,b,c)
>>> type(d)
<class 'zip'>
>>> list(d)
[('林', '海', '馨')]
>>>