python中的列表、元组、字典、集合

一、列表(List)类型:

List(列表) 是 Python 中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。列表用" [ ] "标识,是 python 最通用的复合数据类型。

1、创建列表对象的两种方法

方式一:默认方法

列表对象 = [元素1, 元素2, 元素3, …… , 元素N, ]

	list01=[0,1,'HTML',True,[0,1]]
	print(list01)#[0, 1, 'HTML', True, [0, 1]

方式二:使用 range()内置函数

列表对象 = list(range(stop))
Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
range()参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

    list2=list(range(10))
    print(list2)#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    list2=list(range(3,10))
    print(list2)#[3, 4, 5, 6, 7, 8, 9]
    list2=list(range(3,10,2))
    print(list2)#[3, 5, 7, 9]

2、列表访问:

列表中值的切割也可以用到 [头下标 : 尾下标 : 步长] ,就可以截取相应的列表。
从左到右下标索引默认 0 开始,从右到左下标索引默认 -1 开始,下标可以为空表示取到头或尾。
常用函数有:
.count(obj) : 统计某个元素在列表中出现的次数;
.index(obj) : 从列表中找出某个值第一个匹配的索引位置;
len(list) : 获取列表元素的个数;
max(list) : 获取列表中的最大值;
min(list) : 获取列表中的最小值;

    list2=list(range(10))
    print(list2)
    print(list2[0],list2[-1])#0 9
    print(list2[2:8])#[2, 3, 4, 5, 6, 7]
    print(list2[2:8:2])#[2, 4, 6]
    print(list2.count(2))#1
    print(list2.index(2))#2
    print(len(list2),min(list2),max(list2))#10 0 9

3、列表更新:

所谓的更新指的是对列表元素的 重新赋值、删除、添加等相关操作。
常用的函数:
**.append(obj) :**在列表末尾添加一个元素;
.insert(index, obj) : 向指定位置前序添加一个元素
.remove(obj) : 移除一个指定的元素;
.reverse() : 反向列表中的元素;
.sort() : 对列表进行排序;
常用运算符:
+(拼接列表)
*(浅拷贝只拷贝了列表的“引用”,里面的内容其实是指向的同一个东西,修改其中一个元素时,后面的元素也发生了改变)


    list1=['HTML','CSS','JavaScript','XML']
    list1.append('python')
    print(list1)#['HTML', 'CSS', 'JavaScript', 'XML', 'python']
    list1.insert(2,'Hello')
    print(list1)#['HTML', 'CSS', 'Hello', 'JavaScript', 'XML', 'python']
    list1.remove('CSS')
    print(list1)#['HTML', 'Hello', 'JavaScript', 'XML', 'python']
    list1.reverse()
    print(list1)#['python', 'XML', 'JavaScript', 'Hello', 'HTML']
    list1.sort()
    print(list1)#['HTML', 'Hello', 'JavaScript', 'XML', 'python'] 根据ASCII排序
    print(list1+list(range(3)))#['HTML', 'Hello', 'JavaScript', 'XML', 'python', 0, 1, 2]
    print(list(range(3))*2)#[0, 1, 2, 0, 1, 2]

4、List[] 与 list[:] 的区别:

“ [ ] ”标识,是典型的引用操作,传址操作。
“ [:] ”标识,是典型的赋值操作,传值操作 。

    list_1=list(range(4))
    list_2=list_1
    print(id(list_1))#1590116560960
    print(id(list_2))#1590116560960
    list_2=list_1[:]
    print(id(list_2))#1590116554048

二、元组(Tuple)类型:

Tuple(元组)类似于List(列表)。元组不能二次赋值(元组内的元素不允许更新),相当于只读列表。元组用“ ( ) "标识。内部元素用逗号隔开

1、创建元组的方法

组对象名称 = ( 元素1, 元素2, ……, 元素N )

    tup1=(1,'HTML',[1,2,3],True)
    print(tup1)#(1, 'HTML', [1, 2, 3], True)

2、元组的特点

元组与列表的所有操作基本类似,唯一不一样的地方是,元组的元素不允许被修改。

    tup2=tuple(range(5))
    print(tup2,type(tup2))#(0, 1, 2, 3, 4) <class 'tuple'>
    tup2[1]=2#错误,不能修改
    '''
        tup2[1]=2
        TypeError: 'tuple' object does not support item assignment
    '''

3、元组访问:

同列表

三、字典(Dictionary)类型:

字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。
字典当中的元素是通过键来存取的,而不是通过偏移存取
字典用“{ }”标识。字典由索引(key)和它对应的值value组成,是一个典型的“k-v值 ”数据结构。

1、创建字典的方法:

字典对象名称 = { }
字典对象名称 = { key1 : value1, key2 : value2, …. , keyN : valueN }

    dic1={}
    dic1[0]='zhangsan'
    dic1[1]='man'
    print(dic1)#{0: 'zhangsan', 1: 'man'}
    dic2={'name':'zhangsan','age':18,'high':1.78}
    print(dic2)#{'name': 'zhangsan', 'age': 18, 'high': 1.78}

2、字典(Dictionary)k-v 值在内存中的表现形式:

k-v结构一般情况下在操作访问的时候都会使用key索引进行每个元素的读取操作
由于key索引键会被频繁访问,因此索引键key存放在Stack栈内存中,而value值则存储在Heap堆内存中。且字典是随机存储形式,无序结构

3、字典(Dictionary)访问:

字典对象名称[ key ] #访问key对应的value值
字典对象名称.keys #访问当前字典所有key索引键
字典对象名称.values #访问当前字典所有valeus值

    dic2={'name':'zhangsan','age':18,'high':1.78}
    print(dic2)#{'name': 'zhangsan', 'age': 18, 'high': 1.78}
    print(dic2['name'],dic2['age'],dic2['high'])#zhangsan 18 1.78
    print(dic2.keys())#dict_keys(['name', 'age', 'high'])
    print(dic2.values())#dict_values(['zhangsan', 18, 1.78])

四、列表[List]、元组(Tuple)和 字典{Dictionary}的异同点:

从承载数据类型的结构角度看:Python的数据类型分为数字类型和非数字类型。
数字类型包括:整型、长整型、浮点型和复数型。
非数字类型包括:字符串、列表、元组和字典。

共同点:

都可以使用切片、连接(+)、重复(*)、取值(a[ ])等相关运算。
截取方式相同:名称[头下标:尾下标]
下标是从0开始算起,可以是正数或者负数,下标为空则表示取到头或者尾
开始截取时,包含了下边界,而截取到最大范围不包括上边界 [ ) 。

不同点:

列表 可以直接赋值
元组不可以赋值
字典按照 dict[k]=v 的方式赋值

五、补充:集合set

集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。
可以用大括号{}创建集合。注意:如果要创建一个空集合,必须用 set()而不是 {} ;后者创建一个空的字典。

1、创建集合的方法:

集合对象名称 = {元素1,元素2,…}
集合对象名称 = {‘abc’} 会将abc创建为{‘a’, ‘b’, ‘c’}
空集合:集合对象名称 = set()

    book={'Math','Language','English','Math'}
    print(type(book))#<class 'set'>
    print(book)#{'Language', 'English', 'Math'}删除重复的
    empyt_set=set()#创建空集合
    empyt_dic={}#空字典
    print(type(empyt_set),type(empyt_dic))#<class 'set'> <class 'dict'>
    set1=set('abc')
    print(set1)#{'a', 'c', 'b'}

2、集合 Set 的关系操作(交、并、补):

基本操作:
.add(‘x’) # 添加一项
.update([0,1,2]) # 添加多项

    num1=set(range(5))#创建一个数字集合
    num2={1,3}#创建一个数字集合
    print(num1,num2)#{0, 1, 2, 3, 4} {'o', 'h', 'l', 'e'}
    a=num1|num2#并集
    b=num1&num2#交集
    c=num1-num2 # 差集(在num1中不在num2中)
    d=num1^num2# 对称差集(项在num1或snum2中,但不会同时出现在二者中)
    print(a,b,c,d)#{0, 1, 2, 3, 4} {1, 3} {0, 2, 4} {0, 2, 4}
    num1.add(5)#添加一项
    num2.update([6,7,8,'abc'])#添加多项
    print(num1,num2)#{0, 1, 2, 3, 4, 5} {1, 3, 6, 7, 8, 'abc'}

你可能感兴趣的:(python)