列表
列表的基本使用
# 使用[]来表示一个列表,列表里每一个数据我们称之为元素,元素之间使用逗号进行分割
names = ['刘备','关羽','张飞','赵云','马超','黄忠']
print(names) # ['刘备', '关羽', '张飞', '赵云', '马超', '黄忠']
# 可以使用 list(可迭代对象) 可以将可迭代对象转换为一个列表
name=list(('刘备','关羽','张飞','赵云','马超','黄忠'))
print(name) # ['刘备', '关羽', '张飞', '赵云', '马超', '黄忠']
# 和字符串一样,都可以获取下标来获取元素和对元素进行切片,同时还可以使用下标来修改列表里的元素
name=list(('刘备','徐庶','关羽','张飞','赵云','马超','黄忠'))
print(name[1]) # 徐庶
name[1]='诸葛亮'
print(name) # ['刘备', '诸葛亮', '关羽', '张飞', '赵云', '马超', '黄忠']
# 也可以通过下标来实现切片
a = ['刘备', '诸葛亮', '关羽', '张飞', '赵云', '马超', '黄忠','姜维','马谡','王平','廖化']
print(name[3:7]) # ['张飞', '赵云', '马超', '黄忠']
列表的操作
列表是用来保存数据的,是有序可变的
操作列表一般是指 增、删、改、查
增加数据
heros = ['阿珂', '嬴政', '韩信', '露娜', '后裔', '亚瑟', '李元芳']
# 添加元素的方法 append insert extend
# append在列表的最后面追加一个数据
heros.append('黄忠')
print(heros) # ['阿珂', '嬴政', '韩信', '露娜', '后裔', '亚瑟', '李元芳', '黄忠']
# insert(index,object) index:表示下标,在哪个位置插入数据。object:表示对象,具体插入的数据
heros.insert(3, '关羽')
print(heros) # ['阿珂', '嬴政', '韩信', '关羽', '露娜', '后裔', '亚瑟', '李元芳', '黄忠']
# extend(iterable) 将可迭代对象添加到列表尾部
x = ['马可波罗', '米莱迪', '狄仁杰']
heros.extend(x)
print(heros)
# ['阿珂', '嬴政', '韩信', '关羽', '露娜', '后裔', '亚瑟', '李元芳', '黄忠', '马可波罗', '米莱迪', '狄仁杰']
删除数据
删除数据有三个相关的方法: pop,remove,clear
master = ['王昭君', '甄姬', '貂蝉', '妲己', '小乔', '大乔']
# pop 默认删除列表里最后一个数据,并且返回删除的数据
x = master.pop()
print(x) # 大乔
print(master) # ['王昭君', '甄姬', '貂蝉', '妲己', '小乔']
# pop还可以传入index参数,用来删除指定位置上的数据
master.pop(3)
print(master) # ['王昭君', '甄姬', '貂蝉', '小乔']
# 下标3的数据妲己已被删除
# remove用来删除指定的元素
master.remove('小乔')
# master.remove('妲己') # 如果数据在列表中不存在会报错
print(master) # ['王昭君', '甄姬', '貂蝉']
# clear 用来清空列表
master.clear()
print(master) # []
查询数据
tanks = ['亚瑟', '程咬金', '盾山', '张飞', '廉颇', '程咬金']
# 通过数据获取下标
print(tanks.index('盾山')) # 2
# print(tanks.index('庄周')) # 如果元素不存在会报错
# 查询重复数据数量
print(tanks.count('程咬金')) # 2
# 通过下标获取数据
print(tanks[2]) # 盾山
# in,not in 运算符
print('张飞' in tanks) # True
print('苏烈' in tanks) # False
print('苏烈' not in tanks) # True
print('程咬金' not in tanks) # False
修改数据
# 使用下标可以直接修改列表里的元素
tanks = ['亚瑟', '程咬金', '盾山', '张飞', '廉颇', '程咬金']
tanks[5] = '凯'
print(tanks) # ['亚瑟', '程咬金', '盾山', '张飞', '廉颇', '凯']
列表的遍历
遍历:将所有的数据访问一遍,遍历针对的是可迭代对象
killers = ['李白', '兰陵王', '韩信', '赵云', '阿珂', '孙悟空']
# for...in循环的本质就是不断调用迭代器的next方法查找下一个数据
for k in killers:
print(k)
'''
李白
兰陵王
韩信
赵云
阿珂
孙悟空
'''
# while遍历
i = 0
while i < len(killers):
print(killers[i])
i += 1
'''
李白
兰陵王
韩信
赵云
阿珂
孙悟空
'''
# 获取最后一个数据
print(killers[len(killers) - 1]) # 孙悟空
交换两个变量的值
a = 13
b = 20
- 方法一:使用第三个变量
c = b
b = a
a = c
print(a,b) # 20 13
- 方法二:使用运算符实现,只能是数字
a = a + b
b = a - b
a = a - b
print(a, b) # 20 13
- 方法三:使用异或^运算符
a = a ^ b
b = a ^ b
a = a ^ b
print(a, b) # 20 13
- 方法四:使用python特有
a, b = b, a
print(a, b) # 20 13
冒泡排序
冒泡排序思想:让一个数字和它相邻的下一个数字进行比较运算,如果前一个数字大于后一个数字,交换两个数据的位置
nums = [6, 5, 3, 1, 8, 7, 2, 4]
# 每一趟比较次数还可以优化
# 总比较趟数还可以优化
i = 0
while i < len(nums) - 1:
i += 1
n = 0
while n < len(nums) - 1:
if nums[n] > nums[n + 1]:
nums[n], nums[n + 1] = nums[n + 1], nums[n]
n += 1
print(nums)
# [1, 2, 3, 4, 5, 6, 7, 8]
[5, 3, 1, 6, 7, 2, 4, 8]
[3, 1, 5, 6, 2, 4, 7, 8]
[1, 3, 5, 2, 4, 6, 7, 8]
[1, 3, 2, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
6. 列表的排序和反转
nums = [6, 5, 3, 1, 8, 7, 2, 4]
# 调用列表的 sort 方法可以直接对列表进行排序
# 升序,参数默认可以为空
nums.sort(reverse=False)
print(nums) # [1, 2, 3, 4, 5, 6, 7, 8]
# 降序
nums.sort(reverse=True)
print(nums) # [8, 7, 6, 5, 4, 3, 2, 1]
# 内置函数sorted,不会改变改变原有的列表数据,会生成一个新的有序数据
nums = [6, 5, 3, 1, 8, 7, 2, 4]
x = sorted(nums)
print(nums) # [6, 5, 3, 1, 8, 7, 2, 4]
print(x) # [1, 2, 3, 4, 5, 6, 7, 8]
# 反转
names=['zhangsan','lisi','wangwu']
names.reverse()
print(names) # ['wangwu', 'lisi', 'zhangsan']
可变数据类型和不可变数据类型
python里的数据都是保存在内存里的
python里的数据分为可变类型和不可变类型
不可变类型:字符串、数字、元祖
可变类型:列表、字典、集合
不可变数据类型,如果修改值,内存地址会发生改变
可变数据类型,如果修改值,内存地址不会发生改变

列表的复制
x = [100, 200, 300]
# x和y只向同一个内存空间,会相互影响
y = x # 等号是内存地址的赋值
# 调用copy方法,可以赋值一个列表,这个列表和原有的列表内容一样,但指向不同的内存空间
z = x.copy()
x[0] = 1
print(y) # [1, 200, 300]
print(x) # [1, 200, 300]
print(z) # [100, 200, 300]
print('0x%x,0x%x,ox%x' % (id(x), id(y), id(z)))
# 0x1c594e55208,0x1c594e55208,ox1c594fe3248
# 使用 copy 模块实现拷贝
import copy
a = copy.copy(x) # 效果等价于 x.copy(),都是一个浅拷贝
# 切片其实就是一个浅拷贝
names1=['张三','李四','王五','杰克']
names2=names1[::]
names1[0]='jerry'
print(names2) # ['张三', '李四', '王五', '杰克']
求列表里的最大数
nums = [3, 1, 9, 8, 4, 2, 0, 7, 5]
# 升序排序
nums.sort()
print(nums) # [0, 1, 2, 3, 4, 5, 7, 8, 9]
# 最后一个就是最大数
print(nums[-1]) # 9
nums = [3, 1, 9, 8, 4, 2, 0, 7, 5]
i = 0
x = 0
while i < len(nums):
if nums[i] > x:
x = nums[i]
index = i
i += 1
print('发现最大数{max},它的下标是{index}'.format(max=x, index=index)) # 发现最大数9,它的下标是2

浙公网安备 33010602011771号