Loading

列表

列表的基本使用

# 使用[]来表示一个列表,列表里每一个数据我们称之为元素,元素之间使用逗号进行分割
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)
# ['阿珂', '嬴政', '韩信', '关羽', '露娜', '后裔', '亚瑟', '李元芳', '黄忠', '马可波罗', '米莱迪', '狄仁杰']

删除数据

删除数据有三个相关的方法: popremoveclear

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里的数据分为可变类型和不可变类型

不可变类型:字符串、数字、元祖

可变类型:列表、字典、集合

不可变数据类型,如果修改值,内存地址会发生改变

可变数据类型,如果修改值,内存地址不会发生改变

屏幕截图 2021-01-21 001733

列表的复制

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
posted @ 2021-02-06 15:28  群哥V  阅读(57)  评论(0)    收藏  举报