Python期末复习-容器

151 阅读4分钟

列表

列表是引用类型

  1. 创建
x = []
x = list((1, 2, 3, 4, 5) # x = [1, 2, 3, 4, 5]
x = list(range(1, 10, 2)) # x = [1, 3, 5, 7, 9]
x = list('bhy') # x = ['b', 'h', 'y']
  1. 迭代器
x = [2, 3, 3, 6, 6, 6]
for item in x:
    if item == 3:
        x.remove(item)
#这样只能删除一个3
  1. 列表插入
x = [1, 2, 3]
x.insert(1, 1000)
print(x) #[1, 1000, 2, 3]
  1. list.copy()浅拷贝
a = [[1, 2, 3], [4, 5, 6]]
b = a.copy()
b[0][1] = 7
print(b) #[[1, 7, 3], [4, 5, 6]]
a[1][2] = 8
print(a) #[[1, 7, 3], [4, 5, 8]]
print(b) #[[1, 7, 3], [4, 5, 8]]
  1. 列表增加:
x = [1, 2, 3]
x.extend((2, 3))
print(x) #[1, 2, 3, 2, 3]
x.extend([4, 5])
print(x) #[1, 2, 3, 2, 3, 4, 5]
x[10000:] = [0] #10000可改为任意>len(x)的数
print(x) #[1, 2, 3, 2, 3, 4, 5, 0]

y = [1, 2, 3]
y[10000:] = [0, 2, 4, 8] #10000可改为任意>len(x)的数
print(y) #[1, 2, 3, 0, 2, 4, 8]
  1. 列表删除

del:没有返回值

del(x)
x = [1, 3, 5, 7, 9]
del x[1] # 或del(x[1]), 不能del 1
print(x) #[1, 5, 7, 9]

pop:有返回值,不加参数删除最后一个元素,索引超出范围抛出异常

x = [1, 3, 5, 7, 9]
t = x.pop()
print(t) #9
print(x) #[1, 3, 5, 7]
t = x.pop(1)
print(t) #3
print(x) #[1, 5, 7]

remove:删除指定值的第一个元素,不存在元素抛出异常

  1. 统计元素个数list.count
  2. 乘法扩容:同样是浅拷贝
x = [[1, 2, 3]]
x = x * 3
x[0][0] = 10
print(x) #[[10, 2, 3], [10, 2, 3], [10, 2, 3]]
  1. 切片

x[::] <=> x[0:len(x):1]

x[::-1] 不等价于x[0:len(x):-1],等价于x[len(x) - 1:-1,-1]

切片是浅拷贝

切片可以删除元素

x = [1, 3, 5, 7. 9]
del x[:3]
print(x) # [7, 9]

切片下标可以越界

x = [10, 20, 30, 40, 50]
print(x[-4:-100:-1]) #[20, 10]
  1. 排序
# 按键值排序:
x = [17, 3, 2, 15, 298, 34, 4555]
x.sort(key = lambda x:len(str(x))) 
#[3, 2, 17, 15, 34, 298, 4555]

#先排序列表list中元素的第一个关键字,然后在第一个元素的基础上排序按第二个关键字进行排序
list = [('d',3),('a',5),('d',1),('c',2),('d',2)]
print (sorted(list, key = lambda x:(x[0], x[1])))
#[('a', 5), ('c', 2), ('d', 1), ('d', 2), ('d', 3)]

#双列表排序,一个列表排序,另一个列表联动:
list1 = ['b', 'h', 'y', 't', 'a', 'i', 'j', 'u', 'l']
list2 = [7, 9, 6, 3, 5, 2, 4, 2, 8]
ansList = [item[0] for item in sorted(list(zip(list1, list2)), key = lambda x:x[1])]
print(ansList)
#['i', 'u', 't', 'j', 'a', 'y', 'b', 'l', 'h']
  1. zip

返回一个zip对象,要用list变成列表

zip可以针对列表、元组或二者混合

>>> list(zip([1, 2, 3], [4, 5, 6]))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip((1, 2, 3), (4, 5, 6)))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip((1, 2, 3), [4, 5, 6]))
[(1, 4), (2, 5), (3, 6)]
>>> 
  1. enumerate
list1 = ['b', 'h', 'y', 't', 'a', 'i', 'j', 'u', 'l']
for item in enumerate(list1):
    print(item)

#输出结果:
(0, 'b')
(1, 'h')
(2, 'y')
(3, 't')
(4, 'a')
(5, 'i')
(6, 'j')
(7, 'u')
(8, 'l')

元组

和列表类似

元组的内容不能修改,因此没有append(),extend(),pop(),remove(),insert()

del可以删除整个元组,不可以删除一个元素

元组可以作为字典的键,列表不可以

生成器推导式:和列表推导式类似,但是用的是圆括号,但结果不是一个元组,每个元素只能访问一次

x = (i for i in range(5))
z = tuple(x)
print(z) #(0, 1, 2, 3, 4)
y = tuple(x)
print(y) #()

x = (i for i in range(5))
print(x.__next__()) # 0
print(x.__next__()) # 1
z = list(x)
print(z) # [2, 3, 4]

字典

  1. 创建
a = {'b':1, 'h':2, 'y':3}
a = {}
a = dict()
a = dict(b = 1, h = 2)

keys = ['b', 'h', 'y']
values = [1, 2, 3]
a = dict(zip(keys, values))
print(a) #{'b': 1, 'h': 2, 'y': 3}
  1. 读元素

读取单个元素: get()

a = {'b':1, 'h':2, 'y':3}
x = a.get('b')
print(x) # 1
y = a.get('z', 0)
print(y) # 0
z = a.get('h', 0)
print(z) # 2

读取全部元素: item(), keys(), values()

a = {'b':1, 'h':2, 'y':3}
for item in a.items():
    print(item)
for item in a.keys():
    print(item)
for item in a.values():
    print(item)
    
执行结果:
('b', 1)
('h', 2)
('y', 3)
b
h
y
1
2
3
  1. 修改

单个修改

a = {'b':1, 'h':2, 'y':3}
a['b'] = 2
a['z'] = 3

批量修改

a = {'b':1, 'h':2, 'y':3}
a.update({'c':3}) 
b = {'b':2, 'z':9}
a.update(b)
  1. 删除

pop():删除指定键值元素

a = {'b':1, 'h':2, 'y':3}
t = a.pop['b']
print(t) # 1
print(a) # {'h':2, 'y':3}

集合

  1. 创建
a = set(range(8, 14))
a = set([1, 2, 3, 2, 3])
a = {3, 5}
  1. 添加元素
a = {3, 5}
a.add(7)
  1. 删除元素

pop(),随便删除一个,不能指定删除哪一个

a = {3, 5, 7}
t = a.pop()
#不能写成a.pop(1)

remove(x), 删除指定元素

a = {3, 5, 7}
a.remove(7)
print(a) # {3, 5}

clear(),清空集合

  1. 并交差、对称差
# 并
c = a | b
a.union(b)

# 交
c = a & b
a.intersection(b) 

# 差
c = a - b
a.difference(b)

# 对称差
c = a ^ b
a.symmetric_difference(b)

没有a + b这种运算,集合并使用a | b而非a + b