列表的基本使用
- 当我们有多个数据需要按照一定的顺序进行保存的时候,可以考虑使用列表
- 使用[]来表示一个列表,列表里面的每一个数据我们称之为元素
- 元素之间使用逗号进行分隔
names = ['zhangsan','lisi','wangwu','ermazi','dazhutou']
# 可以使用list(可迭代对象)将可迭代对象转换成一个列表
print(list(('aaa','bbb','ccc','ddd'))) # ['aaa', 'bbb', 'ccc', 'ddd']
# 和字符串一样,列表可以使用下标来获取元素和对元素进行切片
print(names[3]) # ermazi
print(names[3:6]) # ['ermazi', 'dazhutou']
# 同时,可以使用下标来修改列表里面的元素
names[3] = 'erliuzi'
print(names) # ['zhangsan', 'lisi', 'wangwu', 'erliuzi', 'dazhutou']
列表的操作
- 列表是用来保存多个数据,是有序可变的
- 操作列表,一般都包含增删改查
增
- 添加元素的方法 append insert extend
names = ['zhangsan','lisi','wangwu','ermazi','dazhutou']
names.append('liuziheng') # append在列表的最后追加一个数据
print(names) # ['zhangsan', 'lisi', 'wangwu', 'ermazi', 'dazhutou', 'liuziheng']
names.insert(2,'zhuzhuzhu') # insert 在指定的索引之前插入一个数据
print(names) # ['zhangsan', 'lisi', 'zhuzhuzhu', 'wangwu', 'ermazi', 'dazhutou', 'liuziheng']
other_names = ['aaa','bbb','ccc']
names.extend(other_names) # extend 在指定的列表后拼接一个可迭代对象
print(names) # ['zhangsan', 'lisi', 'zhuzhuzhu', 'wangwu', 'ermazi', 'dazhutou', 'liuziheng', 'aaa', 'bbb', 'ccc']
删
names = ['zhangsan','lisi','wangwu','ermazi','dazhutou']
x = names.pop() # pop 方法可以根据传入的index参数删除并返回列表中的元素,默认参数是最后一个
print(x) # dazhutou
print(names) # ['zhangsan', 'lisi', 'wangwu', 'ermazi']
names.remove('lisi') # remove 方法根据传入的参数删除指定的元素,如果元素不存在,则报错
print(names) # ['zhangsan', 'wangwu', 'ermazi']
names.clear() # clear 方法用来清空一个列表
print(names) # []
改
查
names = ['zhangsan','lisi','wangwu','ermazi','dazhutou']
x = names.index('zhangsan') # index 返回元素在列表中的下标,元素不存在则报错
print(x) # 0
x = ('lisi' in names) # in 判断元素是否在列表中,是返回True,否返回False
print(x) # True
列表的遍历
- 遍历:将所有的数据都访问一遍.遍历针对可迭代对象
- while循环遍历
- for...in循环遍历
names = ['zhangsan','lisi','wangwu','ermazi','dazhutou']
# while循环,通过访问每一个元素的下标来访问每一个数据
i = 0
while i < len(names):
print(names[i])
i += 1
# for..in循环,本质是不断的调用next方法查找下一个数据
for i in names:
print(i)
冒泡排序
n = [6,5,3,1,8,7,2,4]
x = 0
while x < 7:
x += 1
i = 0
while i < len(n) -1:
if n[i] > n[i+1]:
n[i],n[i+1] = n[i+1],n[i]
i += 1
print(n)
列表的排序反转
- 使用内置方法sort可以对列表进行排序
- 使用内置函数sorted,不会改变原有的列表数据,会生成一个新的有序数据
- 使用reverse方法,相当于[::-1],可以将列表倒排
names = ['zhangsan','lisi','wangwu']
names.sort() # 排序
print(names) # ['lisi', 'wangwu', 'zhangsan']
names.sort(reverse=True) # reverse 关键字,默认False,True代表倒序排列
print(names) # ['zhangsan', 'wangwu', 'lisi']
# sorted
names = ['zhangsan','lisi','wangwu']
x = sorted(names)
print(names) # ['zhangsan', 'lisi', 'wangwu']
print(x) # ['lisi', 'wangwu', 'zhangsan']
# reverse
names = ['zhangsan','lisi','wangwu']
names.reverse()
print(names) # ['wangwu', 'lisi', 'zhangsan']
names = ['zhangsan','lisi','wangwu']
print(names[::-1]) # ['wangwu', 'lisi', 'zhangsan']
可变数据类型和不可变数据类型
- Python中的数据都是保存在内存中的
- Python中的数据分为可变类型和不可变类型
- 不可变类型:
- 可变类型
- 不可变类型的数据如果修改值,会导致内存地址发生变化
- 可变类型的数据,如果修改值,内存地址不会发生变化
列表的复制
- 调用copy方法,可以复制一个列表
- 这个新的列表和原有的列表内容一样,但是指向不同的内存空间
- 除了使用自带的copy方法之外,也可以使用cpoy模块中的copy方法,使用效果一样
- 切片其实就是一个浅拷贝
深拷贝和浅拷贝
import copy
# 浅拷贝
nums = [1,2,3,4,5,6]
nums1 = nums # 赋值(不属于深/浅拷贝)
nums2 = nums.copy() # 浅拷贝
nums3 = copy.copy(nums) # 浅拷贝
# 深拷贝,只能用copy模块实现
words = ['hello','good',[100,200,300],'yes']
words1 = words.copy()
words[0] = '你好'
print(words1) # ['hello', 'good', [100, 200, 300], 'yes']
words[2][0] = 1
print(words1) # ['hello', 'good', [1, 200, 300], 'yes']
# 浅拷贝可以认为只拷贝了一层
words = ['hello','good',[100,200,300],'yes']
words2 = copy.deepcopy(words) # 深拷贝
words[2][0] = 1
print(words2) # ['hello', 'good', [100, 200, 300], 'yes']