Python入门基础(4)——容器介绍

1、容器:
  • list 列表或数组
    • 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
    • 列表的数据项不需要具有相同的类型
  • tuple 元组(只读列表)
  • dict 字典
    • 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。
  • set 集合
    • 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算。

2、list列表:
(1)类型:
li = [1, 2, 3, '456', [1, 2, 3], {1: 'one', 2: 'two'}]
print(type(list))  #<class 'type'>
print(type(li))    #<class 'list'>
(2)负数索引:
# 元素访问
print(li[0])
print(li[-1])   # 相当于li[len(li) - 1],倒数第1个,也就是最后一个元素
print(li[-2])   # li[len(li) - 2]
(3)查找元素位置:
# 查找元素位置
print(li.index('456'))  #查找456的位置,返回一个数值
print(li.index([1, 2, 3]))
print(li.index(-1))     #找不到,会抛出错误,如果不确定是否有这个元素,要用try/catch来捕获异常
(4)添加元素:
# 添加元素
l_a = [1, 2, 3]
l_a.append(4)      #添加元素
l_a.append(5)
l_b = [6, 7, 8]
l_a.extend(l_b)    # 添加列表
print(l_a)         #显示1,2,3,4,5,6,7,8
(5)删除元素:
del(li[-1]) # del(list[index]),删除最后一个元素
del(li[1])   #删除第一个元素
del(li[-2])  #删除倒数第二个元素,这里的删除是在上面的基础删
print(li)
(6)判断容器是否为空
#判断容器是否为空
l_a = []
if not l_a:
    print('Empty')  # not XX(分配了空间,但是里面没有元素 )和 is None(什么都没有)不是一回事
                   
if len(l_a) == 0:   #根据长度也可以判断是否为空
    print('Empty')                   
(7)遍历列表:
for i in li:              #第一种方法
    print(i)
for i in range(len(li)):  #第二种方法
    print(li[i])
(8)创建矩阵:
#第一种方法,2行3列矩阵
matrix = [None]*2       #显示结果为[none,none]表示没有指定,这里2表示行数,不能用0,否则下面就没法定义了
for i in range(len(matrix)):
    print(i)            #i的变化是0,1;这个是没有必要写的
    matrix[i] = [0]*3   #每次循环都会将一个none取代为[0,0,0]
print(matrix)           #显示结果为[[0,0,0],[0,0,0]]
#第二种方法,利用list comprehension方法,但是会产生浅拷贝问题
n = 2
m = 3
matrix = [[0]*m for i in range(n)]  #这种方法更简单,一行命令创建n行m列矩阵
print(matrix)                       #显示结果
matrix[0][0] = 1                    #索引从0开始
print(matrix) 
#矩阵赋值问题:
for i in range(n):              #对应列表中第几个元素,而这个元素是一个list
    for j in range(m):          #对应第n个元素中的第m个值
        matrix[i][j] = [1] * k  #看起来挺简单

print(matrix)
3、tuple元组(只读,不能更改里面的属性)
t = (1, 2, 3, '456')  #元组是小括号,列表时中括号
print(type(t))        #显示类型:<class "tuple">
# t[0] = 'a'          #因为不能更改值,所以这个会报错
# t.append('x')       #因为不能更改值,所以这个会报错
(1)元组与列表转换没有函数,只能通过赋值,一个个的进行复值转换
(2)return 1,2 这个语句返回的结果是一个元组:[ 1, 2 ]

4、dict字典(dictionary)
(1)
#key-value格式,无序,只能根据key来查找,不能用索引
d = {'a': 1, 'b': 2, 1: 'one', 2: 'two', 3: [1, 2, 3]}
print(type(dict)) #<class 'type'>
print(type(d))    #<class 'dict'>
print(d)          #
  • 对key做了索引,通过key查找,时间复杂度为O(1)
  • 一个key可以对应多个值,可以用数组表示
  • key可以是不同的类型,比如上面有的是数字,有的是字符串
  • 内部是一个哈希表,没有顺序
(2)访问元素:
# 访问元素
print(d['a'])  #根据键值来访问
print(d[1])    #根据键值来访问
print(d[3])    #这里的3是键值,不是索引
(3)
# 判断key是否存在,而不能判断values是否存在
print('two' in d)
print(3 in d)
(4)删除
del (d[ 3 ]) # del(dict[key])

(5)长度
print ( len (d))
d[ 3 ] = [ 1 , 2 , 3 , 4 ]
d[ 3 ] = '1234'

(6)遍历(两种方法)
# 遍历
for key in d:       #第一种方法,根据key来遍历
    print(d[key])
print('...')
for k, v in d.items():    #根据key-value遍历
    print(k, v)
print('...')
(7)得到key值
keys = d.keys()  #得到字典的key值
print(type(keys))  
print(keys)     #输出所有的key值
5、set集合:
(1)类型
s_a = set([1, 2, 2, 3, 4, 5, 6])  #set初始化
s_b = set([4, 5, 6, 7, 8, 9])
print(s_a)   #set是无序且无重复的,而且会自动删除重复元素
print(s_b)
(2)判断元素是否存在
# 判断元素是否存在
print(5 in s_a)
print(10 in s_b)
(3)求并集
# 并集
print(s_a | s_b)   #第一种方法
print(s_a.union(s_b))  #第二种方法
(4)交集
# 交集
print(s_a & s_b)
print(s_a.intersection(s_b))
(5)差集
# 差集 A - (A & B)
print(s_a - s_b)
print(s_a.difference(s_b))
(6)对称差
# 对称差 (A | B) - (A & B)
print(s_a ^ s_b)
print(s_a.symmetric_difference(s_b))
(7)修改元素
# 修改元素
s_a.add('x')   #添加元素
s_a.update([4, 5, 60, 70])  #进行添加
print(s_a)
s_a.remove(70)   #删除元素,没有索引,没有key,只能根据值删除
print(s_a)
# s_a.remove(100)  #如果没有,则会报错

print(len(s_a))
for i in s_a:
    print(i)


猜你喜欢

转载自blog.csdn.net/yuangan1529/article/details/80679607