4.1 列表
4.1.1 列表的创建
lis = [1, 3, 5, 2, 2]
print(lis)
输出结果如下:
[1, 3, 5, 2, 2]
4.1.2 基本操作
- 索引
lis = [1, 3, 2, 2, 5]
print('lis[0]的值为:', lis[0])
print('lis[-1]的值为:', lis[-1])
索引0,也就是第0个元素的值为1,索引-1,也就是最后一个元素的值为5:
lis[0]的值为: 1
lis[-1]的值为: 5
- 切片
lis = [1, 3, 2, 4, 5]
lis2 = lis[1:3]
lis3 = lis[0:4:2]
print('lis2的值为:', lis2)
print('lis2的值为:', lis3)
结果:
lis2的值为: [3, 2]
lis2的值为: [1, 2]
- 加法和乘法
lis2 = [1, 3, 2, 4, 5]
lis3 = [7, 8, 9]
lis4 = lis2 + lis3
print(lis4)
print(lis3 * 2)
结果:
[1, 3, 2, 4, 5, 7, 8, 9]
[7, 8, 9, 7, 8, 9]
- 修改或删除某个元素 del
lis2 = [1, 3, 2, 4, 5]
lis2[0] = 9
print(lis2)
del lis2[1]
print(lis2)
结果:
[9, 3, 2, 4, 5]
[9, 2, 4, 5]
- 删除整个列表
lis2 = [1, 3, 2, 4, 5]
del lis2
print(lis2)
删除列表后再用print打印这个列表,就会报错,因为删除后就不存在了
Traceback (most recent call last):
File "E:/python_project/main.py", line 3, in <module>
print(lis2)
NameError: name 'lis2' is not defined
- append() 追加元素
lis2 = [1, 3, 2, 4, 5]
print(lis2)
lis2.append(8)
print(lis2)
结果:
[1, 3, 2, 4, 5]
[1, 3, 2, 4, 5, 8]
- insert() 插入元素
lis2 = [1, 3, 2, 4, 5]
print(lis2)
lis2.insert(4, "2")
print(lis2)
结果:
[1, 3, 2, 4, 5]
[1, 3, 2, 4, '2', 5]
- extend() 扩展元素
lis2 = [1, 3, 2, 4, 5]
print(lis2)
lis3 = [7, 8]
lis2.extend(lis3)
print(lis2)
[1, 3, 2, 4, 5]
[1, 3, 2, 4, 5, 7, 8]
4.1.3 多维列表
- 多维列表
a = ['a', 1]
n = ['b', 2]
x = [a, n]
print(x)
print(x[0])
print(x[0][1])
结果:
[['a', 1], ['b', 2]]
['a', 1]
1
- 直接创建多维列表
lis = [[1, 2, 3], [4, 5, 6]]
print(lis)
结果:
[[1, 2, 3], [4, 5, 6]]
- 列表解析方式创建
cols = 3
rows = 2
list_2d = [[col + 1 for col in range(cols)] for row in range(rows)]
print(list_2d)
print([col + 1 for col in range(cols)])
print([row for row in range(rows)])
[[1, 2, 3], [1, 2, 3]]
[1, 2, 3]
[0, 1]
4.1.4 迭代器
- 迭代器
lst = [1, 2, 3, 4, 5]
lstiter = iter(lst)
for i in range(len(lst)):
print(lstiter.__next__())
1
2
3
4
5
创建列表的方法:
# 方法1
list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print('list3:', list3)
# 方法2
list2 = []
for n in range(1, 11):
list2.append(n)
print('list2:', list3)
# 方法3
lis4 = list(range(1, 11))
print('lis4:', lis4)
结果:
list3: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
lis4: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4.1.5 列表解析
lis1 = [x * x for x in range(1, 11)]
print(lis1)
lis2 = [m + n for m in 'ABC' for n in 'XYZ']
print(lis2)
这里需要注意和二位列表推导式的区别:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
4.1.6 列表函数和方法
- 列表函数
- 列表方法
4.2元组
4.2.1 元组的创建
tup1 = (1, 2, 3, 2, 4)
print(tup1)
print(type(tup1))
结果:
(1, 2, 3, 2, 4)
<class 'tuple'>
4.2.2 元组的基本操作
- 访问
tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
print("tup1[0]:", tup1[0])
print("tup1[-1]:", tup1[-1])
print("tup2[1:2]:", tup2[1:2])
结果:
tup1[0]: 1
tup1[-1]: 3
tup2[1:2]: (5,)
- 修改
tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
tup3 = tup1 + tup2
print(tup3)
结果:
(1, 2, 3, 4, 5, 6)
- 删除
tup1 = (1, 2, 3)
print(tup1)
del tup1;
print("删除后的元组tup1:")
print(tup1)
打印删除后的元组,就会报错,如下所示:
Traceback (most recent call last):
File "E:/python_project/main.py", line 5, in <module>
print(tup1)
NameError: name 'tup1' is not defined
- 统计
tup1 = (1, 2, 3, 2, 4)
print(tup1)
tup1.count(2)
结果:
(1, 2, 3, 2, 4)
2
- 查找
tup1 = (1, 2, 3, 2, 4)
tup1.index(4)
结果:
4
4.2.3 元组函数和方法
- 函数
tup2 = (1, 2, 3, 2, 4)
tup3 = (2, 2, 4, 5, 8)
print(tup3 > tup2)
print(len(tup2), len(tup3))
print(max(tup2), max(tup3))
print(min(tup2), min(tup3))
lis2 = [1, 2, 4, 7]
tup4 = tuple(lis2)
print(type(lis2), type(tup4))
结果:
True
5 5
4 8
1 2
<class 'list'> <class 'tuple'>
- 方法
tup3 = (2, 2, 4, 5, 8, 3, 2)
print(tup3.count(2))
print(tup3.index(8))
结果:
3
4
4.2.4 元组的优势
- 可以使函数返回多个值
def func():
tup2 = (2, 3, 4)
tup3 = (5, 6, 7)
return tup2, tup3
result = func()
print(type(result))
print(result)
结果:
<class 'tuple'>
((2, 3, 4), (5, 6, 7))
- 可以使程序运行性能提升,一般来说,创建元组类型tuple的变量比列表类型list要快,而且占用更小的存储空间。
import time
def func2():
tup2 = (2, 3, 4)
tup3 = (5, 6, 7)
return tup2, tup3
def func3():
lis2 = [2, 3, 4]
lis3 = [5, 6, 7]
return lis2, lis3
# -------元组
start = time.time()
result = func2()
for i in range(8000):
result = func2()
print(type(result))
print(result)
end = time.time()
print(end-start)
print('----------------------')
# -------列表
start = time.time()
result = func3()
for i in range(8000):
result = func3()
print(type(result))
print(result)
end = time.time()
print(end-start)
结果可以看出,元组创建的时间比列表短:
<class 'tuple'>
((2, 3, 4), (5, 6, 7))
0.00099945068359375
----------------------
<class 'tuple'>
([2, 3, 4], [5, 6, 7])
0.001998424530029297
- 使用元组是线程安全的,元组类型变量的元素不可更改性,可保证多线程读写时的安全问题。
4.3字典
4.3.1 字典的创建
dict2 = {'a': '2', 'b': '3'}
dict3 = {'a': '2'}
dict4 = {'a': 2, 'b': 3}
dict5 = {2: '2', 3: '2'}
dict6 = {(1, 2): '2', 'b': [1, 2, 4]}
print(dict2)
print(dict3)
print(dict4)
print(dict5)
print(dict6)
结果:
{'a': '2', 'b': '3'}
{'a': '2'}
{'a': 2, 'b': 3}
{2: '2', 3: '2'}
{(1, 2): '2', 'b': [1, 2, 4]}
4.3.2 字典的基本操作
- 访问
dict2 = {'a': '2', 'b': '3'}
dict3 = {(1, 2): [3, 4]}
print(dict2['a'])
print(dict3[(1, 2)])
结果:
2
[3, 4]
例子:修改
dict2 = {'name': 'poge', 'age': 18}
print(dict2)
dict2['age'] = 19
print(dict2)
结果:
{'name': 'poge', 'age': 18}
{'name': 'poge', 'age': 19}
例子:删除
dict2 = {'name': 'poge', 'age': 18}
print(dict2)
del dict2['age']
print(dict2)
结果:
{'name': 'poge', 'age': 18}
{'name': 'poge'}
4.3.3 字典的嵌套
dict2 = {'a': {'book': '3', 'age': 20}, 'age': 18}
print(dict2)
dict3 = {'a': [1, 2, 3], 'b': [4, 5, 6]}
print(dict3)
结果:
{'a': {'book': '3', 'age': 20}, 'age': 18}
{'a': [1, 2, 3], 'b': [4, 5, 6]}
4.3.4 字典的遍历
username = {'full_name': 'ZhangWei', 'surname': 'Zhang', 'name': 'Wei'}
# 遍历所有的键值对
print('--------遍历所有的键值对--------')
for k, v in username.items():
print('key:', k)
print('value:', v, '\n')
# 遍历所有键
print('--------遍历所有键--------')
for k in username.keys():
print(k)
print('key:', k, '-value:' + username[k])
# 遍历所有的值
print('--------遍历所有的值--------')
for v in username.values():
print(v)
结果:
--------遍历所有的键值对--------
key: full_name
value: ZhangWei
key: surname
value: Zhang
key: name
value: Wei
--------遍历所有键--------
full_name
key: full_name -value:ZhangWei
surname
key: surname -value:Zhang
name
key: name -value:Wei
--------遍历所有的值--------
ZhangWei
Zhang
Wei
4.3.5 字典的函数和方法
- 函数
dict2 = {'a': '1', 'b': '2'}
dict3 = {'c': '3', 'd': '4'}
print(len(dict2))
str_dict3 = str(dict3)
print(str_dict3)
print(type(str_dict3))
结果:
2
{'c': '3', 'd': '4'}
<class 'str'>
- 方法
dict2 = {'a': '1', 'b': '2'}
dict3 = {'c': '3', 'd': '4'}
print(dict2)
print(dict3)
dict2.clear()
print(dict2)
print('-----------')
dict2 = dict3.copy()
print(dict2)
print('-----------')
print(dict2.get('c'))
print(dict2.fromkeys([1, 2, 3], ['a', 'b', 'c']))
print('-----------')
print(dict2.items())
print(dict2.keys())
print(dict2.values())
dict2.clear()
print(dict2)
dict2.update(dict3)
print(dict2)
print(dict2.setdefault('d'))
dict2.setdefault('f')
print(dict2)
结果:
{'a': '1', 'b': '2'}
{'c': '3', 'd': '4'}
{}
-----------
{'c': '3', 'd': '4'}
-----------
3
{1: ['a', 'b', 'c'], 2: ['a', 'b', 'c'], 3: ['a', 'b', 'c']}
-----------
dict_items([('c', '3'), ('d', '4')])
dict_keys(['c', 'd'])
dict_values(['3', '4'])
{}
{'c': '3', 'd': '4'}
4
{'c': '3', 'd': '4', 'f': None}
4.4 集合
4.4.1 集合的创建
set2 = {'a', '1', 'b', '2'}
print(set2)
print(type(set2))
结果:
{'1', '2', 'b', 'a'}
<class 'set'>
4.4.2 集合的数学运算
set2 = {'a', '1', 'b', '2'}
set3 = {'3', '2', 'd', 'd'}
print(set2 | set3)
print(set2 & set3)
print(set2 - set3)
print(set2 ^ set3)
结果:
{'2', '1', 'b', 'a', 'd', '3'}
{'2'}
{'1', 'b', 'a'}
{'b', 'd', '1', 'a', '3'}
4.4.3 集合的基本操作
set2 = {1, 4, 6, 7}
print(set2)
set2.add(9)
print(set2)
set2.update((3, 5, 8))
print(set2)
set2.remove(3)
print(set2)
set2.discard(5)
print(set2)
结果:
{1, 4, 6, 7}
{1, 4, 6, 7, 9}
{1, 3, 4, 5, 6, 7, 8, 9}
{1, 4, 5, 6, 7, 8, 9}
{1, 4, 6, 7, 8, 9}
4.4.4 不可变集合
集合分为不可变集合和可变集合
一般集合创建默认可变集合,如果创建不可变集合,使用frozenset()方法
s = frozenset('abcd')
print(s)
print(type(s))
结果:
frozenset({'d', 'c', 'a', 'b'})
<class 'frozenset'>
4.4.5 集合函数和方法
set2 = (2, 6, 3, 4)
print(all(set2))
print(any(set2))
print(enumerate(set2))
print(len(set2))
print(max(set2))
print(min(set2))
print(sorted(set2))
print(sum(set2))
结果:
True
True
<enumerate object at 0x000001A5F1A15AC0>
4
6
2
[2, 3, 4, 6]
15
4.5 类型转换和格式化输出
可变数据类型有:列表、字典
可变数据类型,其值可变,但在发生变化时,内存中的地址并不会发生改变
举例:
a = [1, 2, 3]
print(id(a))
a.append(3)
print(id(a))
结果:
1420693794304
1420693794304
不可变对象有:
整形、浮点型、字符型、元组等
不可变对象,在内存中不管有多少个引用,相同的对象只占用一块内存,当改变变量值时,必须创建新的对象。
a = (1, 2, 3)
print(id(a))
a = a + (2, 3)
print(id(a))
结果:
1989404705664
1989403579792
4.5.1 类型转换
print(int('2'))
print(float('0.25'))
print(complex(2, 4))
print(str(8))
print(type(repr(2)))
print(eval('2+4'))
print(tuple([1, 4, 5]))
print(list((2, 4, 5)))
a = set([1, 3, 4, 4, 4, 5, 8])
print(a)
print(chr(87))
print(ord('a'))
print(hex(16))
print(oct(17))
结果:
2
0.25
(2+4j)
8
<class 'str'>
6
(1, 4, 5)
[2, 4, 5]
{1, 3, 4, 5, 8}
W
97
0x10
0o21
4.5.2 格式化输出
print("%d", 4)
print("%s", "adddd")
print("%x", 0x11)
print("%f", 4.2)
结果:
%d 4
%s adddd
%x 17
%f 4.2
a = 2
b = 3
print("{},{}".format(a, b))
print("{0},{1}".format(a, b))
print("{1},{0}".format(b, a))
print("{c},{d}".format(c=a, d=b))
print("{d},{c}".format(c=b, d=a))
结果:
2,3
2,3
2,3
2,3
2,3
4.6 每日分享
守正笃实、久久为功!