前言
今日忠告:要以发展的眼光看待事物,不要抱有任何偏见。
列表相当于其它语言中的数组,一个对象包括id、type、value,变量存储的是一个对象的引用,列表存储的是多个对象的引用。
一、列表的创建与删除
例如:list1 --> 列表对象(id:1 type:list value值为三个对象 分别指向 ‘hello’, ‘world’, 98 的空间)
# 创建列表的第一种方式,使用[]
list1 = ['hello', 'world', 98, 'ya']
print(list1)
print(list1[0], list1[-4])
# 调用内置函数list()
list2 = list(['hello', 'world', 98])
列表的特点:
1、列表元素按顺序有序排序
2、索引映射唯一个数据
3、列表可以存储重复的数据
4、任意数据类型混存
5、根据需要动态分配和回收内存
二、列表的查询操作
1、index:如果查询时列表中存在n个相同元素,只返回元素中的第一个元素的索引。
如果查询的元素在列表中不存在,则会抛出ValError
可以在指定的区间内查找,只当的start和stop之间进行查找
list2 = list(['hello', 'world', 98])
print(list2.index('hello'))
# print(list2.index('python'))
print(list2.index('hello', 0, 3)) # 在0-3的区间内查找hello是否存在
2、获取列表中的单个元素:
正向索引 0 到n-1
逆向索引 -n 到 -1
指定索引不存在,抛出indexError
# 根据索引获取列表中的单个元素
list2 = list(['hello', 'world', 98])
print(list2[2])
print(list2[-2])
3、获取列表中的多个元素
使用切片,切片的结果是对原列表片段的拷贝,id不同。
num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 格式:start=1:stop=6:step
# 列表计数从0开始,输出的时候包含1,不包含 stop:6
print(num[1:6:1]) # 输出2,3,4,5,6
num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print('原列表', id(num))
num1 = num[1:6:1]
print('切片列表', id(num1))
[start:stop:step]可任意省略一个、两个或三个,只要注意冒号的位置就可以了
步长可为整数或者负数,负索引也可以时正步长,只是start和stop的方向必须跟步长方向一致
num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(num) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(num[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(num[7::-1]) # [7, 6, 5, 4, 3, 2, 1, 0]
print(num[6:0:-2]) # [6, 4, 2]
4、判断指定元素在列表中是否存在
元素 in 列表名
元素 not in 列表名
5、列表元素的遍历
for 迭代变量 in 列表名
操作
三、列表元素的增、删、改操作
1、列表元素的增加操作:
(1) append():在列表的末尾添加一个元素;
(2) extend():在列表的末尾至少添加一个元素;
(3) insert():在列表的任意位置添加一个元素;
(4) 切片:在列表的任意位置添加至少一个元素;
list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list1, id(list1)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2835747888320
list1.append(100)
print(list1, id(list1)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100] 2835747888320
# ------------------------------------
list2 = list(['hello', 'world', '!'])
list1.append(list2) # 用append加多个元素会出现中括号
list1.extend(list2) # 向列表一次性添加多个元素 使用extend
print(list1, id(list1))
# -------------------------------------
list2.insert(0, '世界')
print(list2) # ['世界', 'hello', 'world', '!']
# --------------------------------------
list3 = ['春华', '秋实']
list1[1::] = list3 # 从1之后的全部切走,增加 ‘春华’,‘秋实’
print(list1) # ['世界', '春华', '秋实']
2、列表元素的删除操作
(1)remove():一次删除一个元素,重复元素只删除第一个,元素不存在则抛出ValueError
(2)pop():删除一个指定索引位置上的元素,指定索引不存在抛出IndexError;若不指定索引,删除列表中最后一个元素。
(3)切片:一次至少删除一个元素
(4)clear:清空列表
(5)del:删除列表
list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list1, id(list1)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2055327505472
list1.remove(0)
print(list1, id(list1)) # [1, 2, 3, 4, 5, 6, 7, 8, 9] 2055327505472
# ------------------------------------
list1.pop(1) # 弹出位置为1的数字,若()内为空则弹出最后一个字符,若指定索引不存在则抛出indexError
print(list1, id(list1)) # [1, 2, 3, 4, 5, 6, 7, 8] 2055327505472
# ------------------------------------
# 切片操作:至少删除一个元素,将产生一个新的列表对象,id不同了
new_list = list1[1:3]
print('原列表', list1) # [1, 3, 4, 5, 6, 7, 8, 9]
print('切片列表', new_list) # 相当于删除了两头的数据 [3, 4]
list1[1:5] = [] # 将start=1 和 stop=5 之间的数据置为空
print(list1) # 删除了中间的数据 [1, 7, 8, 9]
# ------------------------------------
list1.clear()
print(list1)
# ------------------------------------
del list1
print(list1) # 爆红:NameError: name 'list1' is not defined
3、列表元素的修改操作
(1)为指定索引的元素赋予一个新值
(2)为指定的切片赋予一个新值
num = [1, 2, 3, 4, 5]
num[2] = 100
print(num)
num[1:3] = [100, 200, 300]
print(num)
四、列表元素的排序
(1)调用sort()方法,列表中的所有元素默认按照从小到大的顺序进行排序,可以只当reverse=True,进行降序排序。
(2)调用内置函数sorted(),将产生一个新的列表对象,可以指定reverse=True,进行降序排序,原列表不发生改变。
list1 = [11, 32, 10, 44, 56, 89]
print('排序前的列表', list1, id(list1))
list1.sort()
print('排序后的列表', list1, id(list1))
print('-----------------------------------')
# 使用内置函数
list1 = [11, 32, 10, 44, 33, 89]
print('原列表', list1, id(list1))
new_list = sorted(list1)
print('新的列表', new_list, id(new_list))
desc_list = sorted(list1, reverse=True)
print('降序列表', desc_list, id(desc_list))
五、列表推导式(重点)
列表生成式,简称为生成列表的公式。
语法格式:ii for i in range(1,10)
(1)ii 表示列表元素的表达式
(2)i 自定义变量
(3)range(1,10) 可迭代对象
list1 = [i * i for i in range(1, 10)]# i*i 为 1*1 2*2 3*3 4*4 5*5 6*6……
print(list1)
# 输出 2,4,6,8,10
list1 = [i * 2 for i in range(1, 5)]
print(list1)
总结
动手去做。
今天读了一本书杨本芬老人的《秋园》,其中秋园简略的生平,最后两行是:一生尝尽酸甜苦辣,终落得如此下场。
读完之后,回味良久。
时代的一粒沙,落在人身上,就是一座山。时代在发展,这没有什么错,就是发展是以太多太多人作为代价了!不管是以前还是现在。