python 初级笔记3 python的内置容器

一、列表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()各位自己细品,用法与列表相同 

11、四集

a={1,11,2,4,5,7}
b={1,24,1,2,4,8,7,10}
print(a&b)  # 交集
print(a|b)  # 并集
print(a^b)  # 补集
print(a-b)  # 差集

 


三、元组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> 


 

  • 27
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值