python基础+详细的列表内容讲解+小案例实现

python列表

    • 一.列表的创建方法
    • 二.列表的定位和切片
    • 三.列表的增删改操作
      • 1.往列表后面追加一个对象(append(所有类型数据))
      • 2.列表元素追加(extend(列表))
      • 3.在列表指定位置插入元素(insert(插入的下标,插入的元素))
      • 4.通过列表索引删除列表元素pop(元素在列表中的索引)
      • 5.删除指定的列表元素(remove(元素))
      • 6.通过切片的方式删除列表中的多个元素(del 切片)
      • 7.获取列表某个元素的下标(index(元素))
      • 8.获取某个元素在列表中出现的次数(count(元素))
      • 9.修改列表元素
      • 10.利用remove删除列表所有元素的错误理解
      • 11.extern和append的区别
    • 四.列表的简单运算
    • 五.列表推导式
    • 六.列表修改元素的易错情况
      • 1.深拷贝copy.deepcopy()和copy的区别
    • 七.简单实现猜拳小游戏
    • 八.简单实现斗地主发牌
    • 总结

列表是一个有序的序列,可以通过索引准确的访问到列表的每一个元素

一.列表的创建方法

python基础+详细的列表内容讲解+小案例实现_第1张图片
再者,在python列表中不仅仅可以存放相同类型的元素,像整形,字符型,布尔型,字典,元组等类型都是可以在同一个列表中的
python基础+详细的列表内容讲解+小案例实现_第2张图片
求列表的长度直接用len()方法就好了此出跟字符串的计算方法是一样的

二.列表的定位和切片

定位:通过索引去找到对应的元素
List=[1,2,3,4,5,6,7,8,9]
比如我们要输出7,我们可以输入List[6]去访问到列表里面7这个元素,在列表中索引是从0开始的,也可以叫做下标
切片的范围是左闭右开的一个区间
python基础+详细的列表内容讲解+小案例实现_第3张图片

三.列表的增删改操作

1.往列表后面追加一个对象(append(所有类型数据))

这里创建一个列表
List=[1,2,3,4,5,6,7,8,9]
在里面添加一个[10,11]的可迭代对象
也可以追加一个元素
python基础+详细的列表内容讲解+小案例实现_第4张图片

2.列表元素追加(extend(列表))

它是把另一个列表中的元素依次追加到原列表的后面,因此这个方法传的参数只能是可迭代对象
python基础+详细的列表内容讲解+小案例实现_第5张图片

3.在列表指定位置插入元素(insert(插入的下标,插入的元素))

此处插入的元素也是可以为任意的数据类型
python基础+详细的列表内容讲解+小案例实现_第6张图片

4.通过列表索引删除列表元素pop(元素在列表中的索引)

python基础+详细的列表内容讲解+小案例实现_第7张图片
从上面可以看出,pop也可以不传入参数,但是不传入参数的pop方法默认情况下是删除列表的最后一个元素

5.删除指定的列表元素(remove(元素))

python基础+详细的列表内容讲解+小案例实现_第8张图片
从上面可以看到,使用remove方法时,如果指定删除的元素不在列表中,程序将会抛出异常

6.通过切片的方式删除列表中的多个元素(del 切片)

python基础+详细的列表内容讲解+小案例实现_第9张图片

7.获取列表某个元素的下标(index(元素))

python基础+详细的列表内容讲解+小案例实现_第10张图片

8.获取某个元素在列表中出现的次数(count(元素))

python基础+详细的列表内容讲解+小案例实现_第11张图片

9.修改列表元素

其实就是通过索引找到相应列表中的元素,进而对这个元素进行一个赋值修改
python基础+详细的列表内容讲解+小案例实现_第12张图片

10.利用remove删除列表所有元素的错误理解

python基础+详细的列表内容讲解+小案例实现_第13张图片
从上面代码中可能大家会认为会依次将列表中的元素依次删除,但列表作为一个有序序列,你移除了第一个元素,列表的其他元素会自动往前移动,补好被删除元素的位置,然后进行第二次remove的时候,remove会从第二个元素开始删除,所以就会每次移除都会跳过一个元素,才会导致删除未成功.
那么为了防止它前移而导致跳过元素,就可以从后往前删除,利用pop
python基础+详细的列表内容讲解+小案例实现_第14张图片

11.extern和append的区别

extern它是将两个列表合并的,就是将另一个列表的元素依次追加到列表中去而append他是追加元素到列表中去的一个方法,不管你传入的是什么类型的元素,他都会把传过来的元素直接看成一个整体追加到列表的后面

四.列表的简单运算

python基础+详细的列表内容讲解+小案例实现_第15张图片

五.列表推导式

格式[变量 for 变量 in 可迭代对象]
列表推导式子中也可以添加逻辑判断语句,对列表数据筛选,并把筛选的结果放到一个新的列表中
python基础+详细的列表内容讲解+小案例实现_第16张图片

以上操做实际就相当于
python基础+详细的列表内容讲解+小案例实现_第17张图片
除此之外,列表推导式还可以对元素进行一些简单的拼接和运算
python基础+详细的列表内容讲解+小案例实现_第18张图片
这也显而易见列表推导式虽然简洁但是只能实现一些简单的数据的循环遍历以及判断,而不具备复杂逻辑的实现功能

六.列表修改元素的易错情况

把一个列表变量赋值给另一个列表变量,通过修改另一个列表变量.之前那个列表会不会发生改变
python基础+详细的列表内容讲解+小案例实现_第19张图片
通过上图可知,之前那个列表是会被修改的
内部实现
python基础+详细的列表内容讲解+小案例实现_第20张图片
在这个地方实际hero赋值给hero2的是hero的地址,而列表又是一个有序的序列,有了地址那就可以通过索引去找到对应元素,进而可以达到修改列表元素的目的.

但如果是将hero拷贝一份赋值给hero2的话就不可以修改了,此时的hero和hero2不是同一块地址区域
python基础+详细的列表内容讲解+小案例实现_第21张图片
还有一种拷贝的特殊情况
就是当拷贝的列表中还嵌套了子列表
python基础+详细的列表内容讲解+小案例实现_第22张图片

可以看到拷贝过去的列表他的子列表里的元素可以修改,说明,在拷贝过程中它只是把整个列表拷贝过来了,而里面子列表还是可以通过找到它的地址进行修改的.只是整个列表它开辟了一个新的空间

1.深拷贝copy.deepcopy()和copy的区别

copy只会给整个列表开辟一个新的空间拷贝过去,而不会在列表存在子列表时不会给子列表重新开辟一个新的空间来存放这个列表,而copy.deepcopy()深拷贝会给列表的子列表也开辟一个新的内存空间,进而在通过拷贝的列表并不能修改子列表中的元素内容

python基础+详细的列表内容讲解+小案例实现_第23张图片

七.简单实现猜拳小游戏

import random

win_result = [['剪刀', '布'], ['石头', '剪刀'], ['布', '石头']]
# 电脑
computer = ['石头', '剪刀', '布']
while True:
    index = random.randint(0, 2)
    player = input('请输入(剪刀,石头,布):')
    if [player, computer[index]] in win_result:
        print('玩家赢,跑路了')
        break
    elif player == computer[index]:
        print('平局,咱继续')
    else:
        print('电脑赢了,玩家不服气,继续')

八.简单实现斗地主发牌

import random
from time import sleep

# 花色
color_list = ['♠', '♥', '♣', '♦']
# 数字牌
num_list = ['2', 'A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3']
# 扑克
pork_list = []
for num in num_list:
    for color in color_list:
        pork_list.append(color + num)
pork_list.insert(0, '小王')
pork_list.insert(0, '大王')

# 通过随机索引的方式洗牌
pork_index = [i for i in range(len(pork_list))]
# shuffle将列表元素全部打乱
random.shuffle(pork_index)

player1_index = pork_index[:17]
player2_index = pork_index[17:34]
player3_index = pork_index[34:51]
# 给序列排序

player1_index.sort()
player2_index.sort()
player3_index.sort()

# 根据索引实现发牌
print('发牌中.....')
sleep(5)
player1 = [pork_list[index1] for index1 in player1_index]
player2 = [pork_list[index2] for index2 in player2_index]
player3 = [pork_list[index3] for index3 in player3_index]
king = [pork_list[pork_index[-1]], pork_list[pork_index[-2]], pork_list[pork_index[-3]]]
print("player1的牌:" + str(player1))
print("player1的牌:" + str(player2))
print("player1的牌:" + str(player3))
print("地主" + str(king))

总结

列表就是要注意修改元素的那些易错的地方,区分好浅拷贝copy和深拷贝copy.deepcopy()区别,好好理解将列表赋值给另一个变量,然后通过变量修改列表中的元素

你可能感兴趣的:(python基础,python,开发语言,numpy)