一、列表list
列表是包含0个或多个元素的有序序列,属于序列类型 ,列表可以进行元素增加、删除、替
换、查找等操作。列表没有长度限制,元素类型可以不同,不需要预定义长度。
列表类型用中括号([])表示,也可以通过 list(x)函数将集合或字符串类型转换成列表类型。list()函数可生成空列表。
- 底层使用的是双向链表 线性表 有序的----》存在下标
- 列表与数组还是有些不一样的,列表里边可以存储不同的数据类型,数组不可以
1、如何定义
(1)变量名 = [ ]
>>> a=[]
>>> type(a)
<class 'list'>
>>>a = [1,2,3,4,"gouxin",True]
>>> type(a)
<class 'list'>
(2)将数据强制转换成列表:list([1,2,3,4]) list("zhangsan")
>>> aa=list()
>>> type(aa)
<class 'list'>
>>> aa1=list([1,2,3,4])
>>> type(aa1)
<class 'list'>
>>> aa2=list("zhangsan")
>>> aa2
['z', 'h', 'a', 'n', 'g', 's', 'a', 'n']
>>> type(aa2)
<class 'list'>
2、 获取列表的长度:len()函数
>>> aa2=list("zhangsan")
>>> aa2
['z', 'h', 'a', 'n', 'g', 's', 'a', 'n']
>>> len(aa2)
8
3、获取每一个元素:列表名[列表下标]
下标默认
从左向右:从0 开始
从左向右:从-1开始
>>> aa2=list("zhangsan")
>>> aa2
['z', 'h', 'a', 'n', 'g', 's', 'a', 'n']
>>> type(aa2)
<class 'list'>
>>> len(aa2)
8
>>> aa2[2]
'a'
>>> aa2[4]
'g'
>>> aa2[len(aa2)-1]
'n'
>>> aa2[-1]
'n'
>>> aa2[-3]
's'
4、修改数据 列表名[列表下标]=元素
修改时,选用下标不可以超过列表长度,不然会报错。
>>> a=[1,2,3,4,"zhangsan"]
>>> a
[1, 2, 3, 4, 'zhangsan']
>>> a[1]="佳人们"
>>> a
[1, '佳人们', 3, 4, 'zhangsan']
>>> a[8]=1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
5、遍历
①、for
a=[1,2,3,4]
for i in a:
print(i)
结果:
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/遍历.py
1
2
3
4
PS E:\学习笔记\Python>
②、while
index=0
b=list("hello")
while index<len(b):
print(b[index])
index+=1
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/遍历.py
h
e
l
l
o
PS E:\学习笔记\Python>
6、列表的常见方法
dir()函数:打印对象的属性与方法
>>> a=[1,2,3,4]
>>> a
[1, 2, 3, 4]
>>> dir(a)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq_
_', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul
__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__redu
ce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '
__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
前后带双下划线的是魔术方法,不用管他。我我们需要记住的是:
'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'
①、append() :向列表的尾部追加元素
>>> a=[1,2,3,4]
>>> a
[1, 2, 3, 4]
>>> a.append("zhangsan")
>>> a
[1, 2, 3, 4, 'zhangsan']
②、insert(下标,添加的元素)
>>> a
[1, 2, 3, 4, 'zhangsan']
>>> a.insert(2,"双击666")
>>> a
[1, 2, '双击666', 3, 4, 'zhangsan']
③、extend(列表) :合并列表
列表1.extend(列表2) :合并列表的 列表2的数据合并给列表1
>>> a=[1,2,3,4]
>>> b=list("abc")
>>> b
['a', 'b', 'c']
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 'a', 'b', 'c']
④、remove(元素)删除
>>> a
[1, 2, 3, 4, 'a', 'b', 'c']
>>> a.remove("a")
>>> a
[1, 2, 3, 4, 'b', 'c']
⑤、pop(下标)
通过下标删除元素 不给参数时,删除的是最后一位 -1 。会返回删除的元素
>>> a
[1, 2, 3, 4, 'b', 'c']
>>> a.pop()
'c'
>>> a
[1, 2, 3, 4, 'b']
>>> a.pop(1)
2
>>> a
[1, 3, 4, 'b']
⑥、clear():清空列表里的数据
>>> a
[1, 3, 4, 'b']
>>> a.clear()
>>> a
[]
⑦、count(元素):计数
>>> a=[1,2,3,4,5,6,2,11,23,4,2,1]
>>> a
[1, 2, 3, 4, 5, 6, 2, 11, 23, 4, 2, 1]
>>> a.count(1)
2
⑧、copy():拷贝 浅拷贝
>>> b
[4, 3, 2, 1]
>>> a=[]
>>> a
[]
>>> a=b.copy()
>>> a
[4, 3, 2, 1]
>>> a.append("zhangsan")
>>> a
[4, 3, 2, 1, 'zhangsan']
>>> b
[4, 3, 2, 1]
⑨、reverse() :反转
>>> b
[1, 2, 3, 4]
>>> b.reverse()
>>> b
[4, 3, 2, 1]
⑩、sort(reverse=True)
默认从小到大(reverse=False)
从大到小:reverse=True
>>> a=[2,4,11,4,7,9]
>>> a.sort()
>>> a
[2, 4, 4, 7, 9, 11]
>>> a.sort(reverse=False)
>>> a
[2, 4, 4, 7, 9, 11]
>>> a.sort(reverse=True)
>>> a
[11, 9, 7, 4, 4, 2]
⑪、index(元素)
- 获取匹配到的第一个元素的索引下标。
- index(元素,start) 从start下标开始查找 。
- 若有相同元素就从左到右开始找到第一个符合条件的元素。
>>> a=[1,2,4,"aaa",3,11,0,"zhangsan"]
>>> a.index(3)
4
>>> a.append(2)
>>> a
[1, 2, 4, 'aaa', 3, 11, 0, 'zhangsan', 2]
>>> a.index(2)
1
>>> a.index(2,4)
8
12、 列表切片
>>> a
[1, 2, 4, 'aaa', 3, 11, 0, 'zhangsan', 2]
>>> a[2:4]
[4, 'aaa']
>>> a[1:6:2]
[2, 'aaa', 11]
>>> a[8:3:-1]
[2, 'zhangsan', 0, 11, 3]
13、最大值与最小值
>>> a
[1, 2, 3, 4, 5, 6, 11]
>>> max(a)
11
>>> min(a)
1
14、in 与 not in
>>> a
{1, 4, 5, 11, 77, 22, 23}
>>> 9 in a
False
>>> 2 in a
False
>>> 1 in a
True
二、集合set
- 底层基于哈希表实现的:不能重复,无序
- 集合是元素的无序组合,其类型用大括号{}表示,它没有索引和位置的概念,集合中的元素可以动态增加或删除。
- 集合中的元素不可重复,元素类型只能是固定数据类型,而列表、字典和集合类型本身都是可变数据类型,所以不能作为集合的元素出现。
>>> a={1,2,3,2,1,3,2,1,3,1,2,4,1,2}
>>> a
{1, 2, 3, 4}
1、定义
①、集合名={元素}
大括号内不能为空,否则会成为字典
>>> a={}
>>> type(a)
<class 'dict'>
>>> a={1,2,3}
>>> type(a)
<class 'set'>
>>> a=set("zhangsan")
>>> a
{'z', 'g', 'n', 'a', 'h', 's'}
②、强制转换a=set()
括号内可以为空
>>> a=set()
>>> a
set()
>>> type(a)
<class 'set'>
>>> a=set([1,2,3,4])
>>> type(a)
<class 'set'>
>>> a
{1, 2, 3, 4}
2、集合长度:len()函数
>>> a={1,2,3}
>>> len(a)
3
3、遍历:for
>>> a={1,2,3}
>>> for i in a:print(i)
...
1
2
3
4、集合常见方法
>>> a={1,2,3}
>>> dir(a)
['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__
', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__i
or__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__
reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__su
b__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
>>>
常见方法集
'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset','issuperset','pop','remove','symmetric_difference', 'symmetric_difference_update', 'union', 'update']
1、add(元素)
在末尾添加元素
>>> a={1,2,3}
>>> a.add("zhangsan")
>>> a
{1, 2, 3, 'zhangsan'}
>>>
2、pop():任意一个元素被移除
>>> a={1,22,3,1,2,3,11,3,5,76,3,1}
>>> a
{1, 2, 3, 5, 22, 11, 76}
>>> a.pop()
1
>>> a.pop()
2
>>> a.pop()
3
>>> a.pop(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: set.pop() takes no arguments (1 given)
3、remove(元素):删除元素
>>> a={1,2,4,1,2,1,3,5,11,3,1,5,6,7}
>>> a
{1, 2, 3, 4, 5, 6, 7, 11}
>>> a.remove(2)
>>> a
{1, 3, 4, 5, 6, 7, 11}
4、discard(元素):移除元素
区别:要移除的元素不存在时,discard()不会进行报错
>>> a
{1, 3, 4, 5, 6, 7, 11}
>>> a.remove(9)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 9
>>> a.discard(9)
>>>
5、intersection(集合):交集
>>> a
{1, 3, 4, 5, 6, 7, 11}
>>> b={21,1,2,11,2,3,5,6,2,1,32}
>>> b
{32, 1, 2, 3, 5, 6, 11, 21}
>>> a.intersection(b)
{1, 3, 5, 6, 11}
6、difference(集合) :差集(我有别人没有的东西)
>>> a
{1, 3, 4, 5, 6, 7, 11}
>>> b={21,1,2,11,2,3,5,6,2,1,3
>>> b
{32, 1, 2, 3, 5, 6, 11, 21}
>>> a.difference(b)
{4, 7}
7、union(集合)并集
>>> a
{1, 3, 4, 5, 6, 7, 11}
>>> b={21,1,2,11,2,3,5,6,2,1,32}
>>> b
{32, 1, 2, 3, 5, 6, 11, 21}
>>> a.union(b)
{32, 1, 2, 3, 4, 5, 6, 7, 11, 21}
8、update(集合)
将一个集合的元素添加到另一个集合去
>>> a={1,23,4,5}
>>> b={11,22,77,1,4,1}
>>> a.update(b)
>>> a
{1, 4, 5, 11, 77, 22, 23}
>>>
9、in与not in
>>> a={1,2,4,1,4,6,7,4,6,4,3,55,7,8,"234"}
>>> a
{1, 2, 3, 4, 6, 7, 8, '234', 55}
>>> 2 in a
True
>>> 0 in a
False
10、copy(),clear(),max(),min()各位自己细品,用法与列表相同
三、元组tuple
不可变数据类型。有序的
一旦声明了之后无法追加元素
1、定义
1、元组名=()
>>> a=(1,3,4,5,1,2,4)
>>> a
(1, 3, 4, 5, 1, 2, 4)
>>> type(a)
<class 'tuple'>
>>> b=()
>>> b
()
>>> type(b)
<class 'tuple'>
2、e强制转化
>>> b=tuple()
>>> type(b)
<class 'tuple'>
>>> b=tuple("zhangsan")
>>> b
('z', 'h', 'a', 'n', 'g', 's', 'a', 'n')
>>> type(b)
<class 'tuple'>
>>>
2、访问:元组名名[下标]
>>> b
('z', 'h', 'a', 'n', 'g', 's', 'a', 'n')
>>> b[2]
'a'
>>> b[2:4]
('a', 'n')
>>>
3、遍历
>>> b
('z', 'h', 'a', 'n', 'g', 's', 'a', 'n')
>>> for i in b:print(i)
...
z
h
a
n
g
s
a
n
>>>
4、长度
>>> b
('z', 'h', 'a', 'n', 'g', 's', 'a', 'n')
>>> len(b)
8
>>>
5、元组常见方法
>>> b
('z', 'h', 'a', 'n', 'g', 's', 'a', 'n')
>>> len(b)
8
>>> dir(b)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__
getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__
rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
count()
>>> a
(1, 3, 4, 5, 1, 2, 4)
>>> a.count(1)
2
index()
- 获取匹配到的第一个元素的索引下标。
- index(元素,start) 从start下标开始查找 。
- 若有相同元素就从左到右开始找到第一个符合条件的元素。
>>> a
(1, 3, 4, 5, 1, 2, 4)
>>> a.index(2)
5
6、注
括号除了表示元组之外,还可以表示优先级,赋值只有一个字符串加上括号,默认是字符串
字符串后面要加”,“
>>> a=("bbb")
>>> type(a)
<class 'str'>
>>> a=("abc",)
>>> type(a)
<class 'tuple'>
>>>
7、元组不支持改变 ,可以改变元组里的可变变量
>>> a
(1, 2, 3, 1)
>>> a[0]=2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
可以改变元组里的可变变量
>>> a=(1,2,3,[11,2,34,5,"zhangsan"])
>>> a
(1, 2, 3, [11, 2, 34, 5, 'zhangsan'])
>>> a[3][2]=666
>>> a
(1, 2, 3, [11, 2, 666, 5, 'zhangsan'])
四、字典dirct
1、定义
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中
d = {key1 : value1, key2 : value2 }
字典名={key:value}
字典名={}
>>> a={}
>>> type(a)
<class 'dict'>
>>> dict1 = {"uname":"zhangsan","age":21,"sex":"nan"}
>>> type(dict1)
<class 'dict'>
强制转换dict()
>>> a=dict()
>>> type(a)
<class 'dict'>
>>> a
{}
不能直接将其他类型转换成字典
>>> a
{}
>>> b=[1,2,3,4]
>>> a=dict(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot convert dictionary update sequence element #0 to a sequence
键key只能是字符串与数字
2、查找数据
字典名["键名"]
>>> a
{'name': 'zhangsi', 'age': 21, 'hobby': 'eggy'}
>>> a["age"]
21
>>>
3、添加数据
存在,则进行覆盖,不存在,则进行添加
字典名[新键名]=相对应的值
>>> a
{'name': 'zhangsi', 'age': 21, 'hobby': 'eggy'}
21
>>> a["eat"]="apple"
>>> a
{'name': 'zhangsi', 'age': 21, 'hobby': 'eggy', 'eat': 'apple'}
>>> a[1]=2
>>> a
{'name': 'zhangsi', 'age': 21, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>>
若是键(Key)本身就存在,数据处理只会达到更新效果
>>> a
{'name': 'zhangsi', 'age': 21, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> a["age"]=111
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
4、长度:多少对键值对
用len()
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> len(a)
5
>>> C
5、字典常用方法
首先敲一下dir(某个字典名)得到:
'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update',
'values'
①、get(key,默认不存在时返回 )通过key获取值的
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> a.get("hobby")
'eggy'
>>>
key,默认不存在时返回
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> a.get("hobby")
'eggy'
>>> a.get("love",44)
44
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>>
②、keys():获取所有的键
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> a.keys()
dict_keys(['name', 'age', 'hobby', 'eat', 1])
③、values():获取所有的值
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> a.values()
dict_values(['zhangsi', 111, 'eggy', 'apple', 2])
④、setdefault():添加键值对
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> a.setdefault("kkk","mmm")
'mmm'
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2, 'kkk': 'mmm'}
⑤、pop():通过key删除键值对
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> a.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 argument, got 0
>>> a.pop("age")
111
>>> a
{'name': 'zhangsi', 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>>
⑥、items():返回键值对
>>> a
{'name': 'zhangsi', 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> a.items()
dict_items([('name', 'zhangsi'), ('hobby', 'eggy'), ('eat', 'apple'), (1, 2)])
>>>
⑦、update()把字典dict2的键/值对更新到dict里
有一样的键就让新的值覆盖原来的值,否则增加新的键值对
>>> a
{'name': 'zhangsi', 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> b
{'name': 'lisi', 'age': 21, 'kkk': 'lllmm'}
>>> a.update(b)
>>> a
{'name': 'lisi', 'hobby': 'eggy', 'eat': 'apple', 1: 2, 'age': 21, 'kkk': 'lllmm'}
>>>
⑧、popitem()返回并删除字典中的最后一对键和值。
>>> a
{'name': 'lisi', 'hobby': 'eggy', 'eat': 'apple', 1: 2, 'age': 21, 'kkk': 'lllmm'}
>>> a.popitem()
('kkk', 'lllmm')
>>> a
{'name': 'lisi', 'hobby': 'eggy', 'eat': 'apple', 1: 2, 'age': 21}
>>>
⑨、fromkeys()创建一个新字典,
以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
直接将列表转换成字典,会报错
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>> b
[1, 2, 3, 4]
>>> type(b)
<class 'list'>
>>> c=dict(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot convert dictionary update sequence element #0 to a sequence
>>> c={}
>>> c.fromkeys((1,2,3,4))
{1: None, 2: None, 3: None, 4: None}
>>> c
{}
⑩、del:通过键删除值
del 要移除的项--》可以删除任何的变量
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2, 'kkk': 'mmm'}
>>> del a["kkk"]
>>> a
{'name': 'zhangsi', 'age': 111, 'hobby': 'eggy', 'eat': 'apple', 1: 2}
>>>
6、copy() clear()这3个函数自己细品吧各位
7、遍历
a={'name': 'lisi', 'hobby': 'eggy', 'eat': 'apple', 1: 2, 'age': 21}
for i in a:
print(a[i])
for k,v in a.items():
# print(k)
# print(v)
print(f"{k}:{v}")
结果:
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS E:\学习笔记\Python> & E:/Python/python.exe e:/学习笔记/Python/name.py
lisi
eggy
apple
2
21
name
lisi
hobby
eggy
eat
apple
1
2
age
21
PS E:\学习笔记\Python>