列表基础
#
# 主题:列表基础
#
if __name__ == '__main__':
# 列表中可以存储多个元素,每个元素的数据类型可以不相同
# 每个元素指向不同的对象,不同的对象存储不同类型的数据
myList = ['hello', True, 98]
print( id(myList)) # 输出 2686147977800
print( type(myList)) # 输出 <class 'list'>
print(myList) # 输出 ['hello', True, 98]
创建列表
#
# 主题:列表基础
#
if __name__ == '__main__':
# 列表中可以存储多个元素,每个元素的数据类型可以不相同
# 每个元素指向不同的对象,不同的对象存储不同类型的数据
myList = ['hello', True, 98]
print( id(myList)) # 输出 2686147977800
print( type(myList)) # 输出 <class 'list'>
print(myList) # 输出 ['hello', True, 98]
列表的特点
#
# 主题:列表的特点
#
if __name__ == '__main__':
a = ['hello', True, 1]
# 列表元素按顺序有序排序
# 索引映射唯一数据
print(a[0], a[-3])
# 列表可以储存重复数据
# 任意数据类型混存
b = ['hello', True, 1, 1]
print( list(b))
# 系统会自动根据需要动态分配和回收内存
查询列表
#
# 主题:查询列表
#
if __name__ == '__main__':
a = ['hello', True, 2, True]
# 获取列表中指定元素的索引
print(a.index('hello')) # 输出 0
print(a.index(True)) # 输出 1
# 若列表中有若干相同的元素,则只返回相同元素的第一个元素的索引
print(a.index(True)) # 输出 1
# 若列表中没有要查询的元素,则报错 ValueError
# index(要查找的元素, stop, end) 可以规定查询的范围为 [stop, end)
print(a.index('hello', 0, 3)) # 输出 0
print(a.index(1, 0, 3)) # 输出 1,因为 True 的值为 1
# print(a.index(2, 0, 2)) # 元素 2 不在索引号 0~1 的范围内,会报错ValueError
# 根据索引号获取列表中的单个元素
print(a[3]) # 输出 True
print(a[-1]) # 输出 True
print(a[-4]) # 输出 hello
# 若列表中没有要查询的索引,则报错 IndexError
# 列表名[start: stop: step] 获取列表中多个元素(又称“切片”)
# 列表名[start: stop] 查询范围[start, stop)
# 切片得到的列表与愿列表是不同的对象,只不过两个有相同的元素
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[0: 2: 1])
print(a[0: 2]) # 默认步长为 1
print(a[0: 2:]) # 默认步长为 1
print(a[ : 6: 2]) # 默认范围从第一个元素开始
print(a[0: : 2]) # 默认范围到最后一个元素结束
print(a[ : : -1]) # 默认范围为整个列表,步长为负数表明切片列表元素与原列表元素顺序相反
print(a[9: : -1]) # 与上一句输出相同
print(a[6: 0: -2])
列表元素的判断与遍历
#
# 主题:列表元素的判断与遍历
#
if __name__ = '__main__':
lst = [10, 20, 'python', 'hello']
print(10 in lst)
print(100 in lst)
print(10 not in lst)
print(100, not in lst)
# 遍历列表元素
for item in lst:
print(item)
添加列表元素
#
# 主题:添加列表元素
#
if __name__ == '__main__':
lst = [10, 20, 30]
lst.append(100) # 在原列表的后面添加新元素
print(lst) # 添加元素后的列表与原列表是同一个对象
lst2 = ['hello', 'world']
lst.append(lst2) # lst2 作为对象,整体成为 lst 的一个元素
print(lst) # [10, 20, 30, 100, ['hello', 'world']]
lst.extend(lst2) # 获取 lst2 中每个数据,并按顺序添加到原数列的后面
print(lst) # [10, 20, 30, 100, ['hello', 'world'], 'hello', 'world']
lst.insert(1, '我在这') # 在规定的索引处添加自定义对象
print(lst) # [10, '我在这', 20, 30, 100, ['hello', 'world'], 'hello', 'world']
lst[1: : ] = ['a', 'b', 'c'] # 将原列表中规定范围内的元素删掉,再添加新的元素
print(lst)
删除列表元素
#
# 主题:删除列表元素
#
if __name__ == '__main__':
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst.remove(4) # 删掉指定的元素
# 若要删除的元素不在列表中,则报错 ValueError
print(lst) # [1, 2, 3, 5, 6, 7, 8, 9]
lst.pop(1) # 删除指定索引上的元素
# 若指定的索引超出列表的索引范围,则报错 IndexError
print(lst) # [1, 3, 5, 6, 7, 8, 9]
lst.pop() # 未指定索引,则默认删除最后一个元素
print(lst) # [1, 3, 5, 6, 7, 8]
lst1 = lst[1: 3] # 该操作称为“切片”,lst1 与 lst 是不同的对象,即所对应的存储位置不同
print(lst1) # [3, 5]
print(lst) # [1, 3, 5, 6, 7, 8]
lst[1: 3] = [] # 该操作前后,都是同一个对象,即 lst
print(lst) # [1, 6, 7, 8]
lst.clear() # 清除列表中所有元素
print(lst) # []
lst.extend(['这', '是', '添', '加', '的', '内', '容'])
print(lst) # ['这', '是', '添', '加', '的', '内', '容']
del lst # 删除列表对象,删除了列表的内容和地址
# print(lst) # 将报错 NameError,报错 lst 没有定义
修改列表元素
#
# 主题:修改列表元素
#
if __name__ == "__main__":
lst = [1, 2, 3, 4, 5, 6]
lst[2] = 30 # 该操作修改了 lst[2] 上的引用
# 原先 lst[2] 指向 3 所在对象,后来指向 30 所在对象
print(lst) # [1, 2, 30, 4, 5, 6]
lst[1: 3] = [300, 400, 500, 600]
print(lst) # [1, 300, 400, 500, 600, 4, 5, 6]
排序列表元素
#
# 主题:排序列表元素
#
if __name__ == '__main__':
lst = [20, 40, 10, 98, 54]
print('原列表:', lst)
lst.sort() # 无参数,表明默认升序排序。相当于 lst.sort(reverse=False)
# 排序时在原列表的基础上进行的,没有生成新的列表
print('升序后:',lst) # [10, 20, 40, 54, 98]
lst.sort(reverse=True)
print('降序后:', lst) # [98, 54, 40, 20, 10]
lst1 = sorted(lst) # 升序排序,产生新的列表对象
print(lst1) # [10, 20, 40, 54, 98]
lst1 = sorted(lst, reverse=True) # 降序排序,产生新列表对象
print(lst1) # [98, 54, 40, 20, 10]
列表生成式(生成列表的公式)
#
# 主题:列表生成式(生成列表的公式)
#
if __name__ == '__main__':
lst = [i*i for i in range(1, 10)] # for i in range(1, 10) 是 i 的取值范围[1, 10)
# i*i 是 lst 的通项(类比数学数列的概念)
print(lst) # [1, 4, 9, 16, 25, 36, 49, 64, 81]