Python入门学习笔记——8.列表专题

这篇博客详细介绍了Python编程中的列表数据类型,包括创建、操作和遍历列表的方法,以及列表切片、列表推导式等高级特性。通过实例解析,帮助Python初学者更好地理解和运用列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

############################################################
#1.列表定义与基本操作

varlist1 = [1,2,3,4]
varlist2 = ['a','b','c','d']

# 列表的拼接。把多个列表的元素拼接成一个列表
# res = varlist1+varlist2+[11,22,33]

# 列表元素的重复
# res = varlist1*3

# 检测元素是否存在于列表
# res = 'a' in varlist1

# 列表的索引操作
'''
 0   1   2   3
'a','b','c','d'
-4  -3  -2  -1
'''
# 通过下标获取指定的元素
# res = varlist2[2]
# res = varlist2[-3]

# 通过下标修改元素
# varlist2[2] = 'cc'

# 不能通过下标添加元素,
# varlist2[4] = 'ff'  #IndexError: list assignment index out of range

# 向列表元素中追加元素
# varlist2.append('ff')

print(varlist2)
# 列表元素的删除,通过下标进行元素的删除
# del varlist2[2]
res = varlist2.pop()
# print(res)

# 获取列表的长度 len()
# res = len(varlist2)

print(varlist2)


############################################################
#2.列表的切片操作


'''列表的切片操作
语法==> 列表[开始索引:结束索引:步进值]
    1。 列表[开始索引:]  ==> 从开始索引到列表的最后
    2。 列表[:结束值]    ==> 从开始到指定的结束索引之前
    3。 列表[开始索引:结束索引] ==> 从开始索引到指定结束索引之前
    4。 列表[开始索引:结束索引:步进值] ==> 从指定索引开始到指定索引前结束,按照指定步进进行取值切片
    5。 列表[:] 或 列表[::] ==> 所有列表元素的切片
    6。 列表[::-1]  ==> 倒着获取列表的元素
'''

varlist = ['刘德华','张学友','张国荣','黎明','郭富城','小沈阳','刘能','宋小宝','赵四']

# 从开始索引到列表的最后
res = varlist[2:] # ['张国荣','黎明','郭富城','小沈阳','刘能','宋小宝','赵四']
# 从开始到指定的结束索引之前
res = varlist[:2] # ['刘德华','张学友']
# 从开始索引到指定结束索引之前
res = varlist[2:6] # ['张国荣', '黎明', '郭富城', '小沈阳']
# 从指定索引开始到指定索引前结束,按照指定步进进行取值切片
res = varlist[2:6:2] # ['张国荣', '郭富城']
# 所有列表元素的切片
res = varlist[:]
res = varlist[::]
# 倒着输出列表的元素
res = varlist[::-1]

# 使用切片方法 对列表数据进行更新和删除
print(varlist)

# 从指定下标开始,到指定下标前结束,并替换为对应的数据(容器类型数据,会拆分成每个元素进行赋值)
# varlist[2:6] = ['a','b','c',1,2,3]
# varlist[2:6:2] = ['a','b'] # 需要与要更新的元素个数对应

# 切片删除
# del varlist[2:6]
del varlist[2:6:2]

print(varlist)

############################################################
#3.列表相关函数 重点

varlist = ['刘德华','张学友','张国荣','张学友','黎明','郭富城','小沈阳','刘能','宋小宝','赵四']

# len()  检测当前列表的长度,列表中元素的个数
res = len(varlist)

# count() 检测当前列表中指定元素出现的次数
res = varlist.count('张学友')

# append() 向列表的尾部追加新的元素,返回值为 None
varlist.append('川哥')

# insert() 可以向列表中指定的索引位置添加新的元素,
varlist.insert(20,'aa')


# pop() 可以对指定索引位置上的元素做 出栈 操作,返回出栈的元素
res = varlist.pop() # 默认会把列表中的最后一个元素 出栈
res = varlist.pop(2) # 会在列表中把指定索引的元素进行 出栈

varlist = [1,2,3,4,11,22,33,44,1,2,3,4]
# remove() 可以指定列表中的元素 进行 删除,只删除第一个。如果没有找到,则报错
res = varlist.remove(1)

# index() 可以查找指定元素在列表中第一次出现的索引位置
# res = varlist.index(1)
# res = varlist.index(1,5,20) # 可以在指定索引范围内查找元素的索引位置

# extend() 接收一个容器类型的数据,把容器中的元素追加到原列表中
# varlist.extend('123')

# s.clear() # 清空列表内容
# varlist.clear()


# reverse() 列表翻转
varlist.reverse()

# sort() 对列表进行排序
res = varlist.sort() # 默认对元素进行从小到大的排序
res = varlist.sort(reverse=True) # 对元素进行从大到小的排序
res = varlist.sort(key=abs) # 可以传递一个函数,按照函数的处理结果进行排序

# copy()  拷贝,复制当前的列表、
varlist = ['a','b','c']
res = varlist.copy()

# 对copy后的列表进行操作
del res[2]
'''
['a', 'b']
['a', 'b', 'c']
'''

# 定义 多维列表
varlist = ['a','b','c',[11,22,33]]

res = varlist.copy()

# 对copy的列表进行一个操作
# del res[1] # 对一维列表进行操作,没有问题
del res[3][1] # 对多维列表中的元素,进行操作,则出现了,全部改变的情况

# print(res)
# print(varlist)



############################################################
#4.深拷贝与浅拷贝

# 浅拷贝 只能拷贝当前列表,不能拷贝列表中的多维列表元素

varlist = [1,2,3]
# 简单的拷贝 就可以把列表复制一份
newlist = varlist.copy()
# 对新拷贝的列表进行操作,也是独立的
del newlist[1]
# print(varlist,id(varlist))
# print(newlist,id(newlist))
'''
[1, 2, 3] 4332224992
[1, 3] 4332227552
'''

# 多维列表
varlist = [1,2,3,['a','b','c']]

# 使用copy函数 拷贝一个多维列表
newlist = varlist.copy()

'''
print(newlist,id(newlist))
print(varlist,id(varlist))
[1, 2, 3, ['a', 'b', 'c']] 4361085408
[1, 2, 3, ['a', 'b', 'c']] 4361898496
'''
# 如果是一个被拷贝的列表,对它的多维列表元素进行操作时,会导致原列表中的多维列表也发生了变化
del newlist[3][1]

'''
通过id检测,发现列表中的多维列表是同一个元素(对象)
print(newlist[3],id(newlist[3]))
print(varlist[3],id(varlist[3]))
['a', 'c'] 4325397360
['a', 'c'] 4325397360
'''

# 深拷贝 就是不光拷贝了当前的列表,同时把列表中的多维元素也拷贝了一份
import copy

varlist = [1,2,3,['a','b','c']]

# 使用 copy模块中 深拷贝方法 deepcopy
newlist = copy.deepcopy(varlist)
del newlist[3][1]

print(varlist)
print(newlist)

'''
    print(newlist[3],id(newlist[3]))
    print(varlist[3],id(varlist[3]))
    ['a', 'c'] 4483351248
    ['a', 'b', 'c'] 4483003568
'''

############################################################
#5.列表推到式

# 一,基本的列表推到式使用方式
# 变量 = [变量或变量的处理结果 for 变量 in 容器类型数据]

# 1 假设我们想创建一个平方列表

# 使用普通方法完成
varlist = []
for i in range(10):
    varlist.append(i**2)
# print(varlist)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 使用 map函数和list完成
varlist = list(map(lambda x: x**2, range(10)))
# print(varlist)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 使用列表推到式完成 下面这个列表推到式和第一种方式是一样的
varlist = [i**2 for i in range(10)]
# print(varlist)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 2。 '1234' ==> [2,4,6,8]
# 常规方法完成需求
varstr = '1234'
newlist = []
for i in varstr:
    newlist.append(int(i)*2)
# print(newlist)  # [2, 4, 6, 8]

# 使用列表推到式完成上面的需求
newlist = [int(i)*2 for i in varstr]
# print(newlist)  # [2, 4, 6, 8]


# 使用列表推到式+位运算完成
newlist = [int(i) << 1 for i in varstr]
# print(newlist)  # [2, 4, 6, 8]


# 二,带有判断条件的列表推到式
# 变量 = [变量或变量的处理结果 for i in 容器类型数据 条件表达式]
# 0-9 求所有的偶数,==> [0, 2, 4, 6, 8]
# 常规方法完成
newlist = []
for i in range(10):
    if i % 2 == 0:
        newlist.append(i)
# print(newlist) # [0, 2, 4, 6, 8]

# 列表推到式完成
newlist = [i for i in range(10) if i % 2 == 0]
# print(newlist)  # [0, 2, 4, 6, 8]


# 三, 带有条件判断的多循环的推到式
# [1,2,3],[3,1,4] ==> 把两个列表中的元素 两两组合,要求组合的元素不能重复
# [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

# 常规方法实现
newlist = []
for x in [1,2,3]:
    for y in [3,1,4]:
        if x != y:
            newlist.append((x,y))
# print(newlist)


# 使用列表推到式完成
newlist = [(x,y) for x in [1,2,3] for y in [3,1,4] if x != y]
# print(newlist)

# 四,对于嵌套循环的列表推到式

'''
# 下面这个 3x4的矩阵,它由3个长度为4的列表组成,交换其行和列
[
 [1, 2, 3, 4],
 [5, 6, 7, 8],
 [9, 10, 11, 12],
]

==>
[
    [1, 5, 9], 
    [2, 6, 10], 
    [3, 7, 11], 
    [4, 8, 12]
]
'''
arr = [
 [1, 2, 3, 4],
 [5, 6, 7, 8],
 [9, 10, 11, 12],
]

# 常规方法完成
# newlist = []
# for i in range(4):
#     res = []
#     for row in arr:
#         res.append(row[i])
#     newlist.append(res)
# print(newlist)

# 使用列表推到式完成
newlist = [[row[i] for row in arr] for i in range(4)]
print(newlist)

############################################################
#6.练习题

# 1。 使用列表推到式完成 把字典中的键值对转换成 key=value 的数据格式
'''
字典 {'user':'admin','age':20,'phone':'133'}
列表 ['user=admin','age=20','phone=133']
'''
vardict =  {'user':'admin','age':20,'phone':'133'}
varlist = [i+'='+str(vardict[i]) for i in vardict]
# print(varlist) # ['user=admin', 'age=20', 'phone=133']
# res = '&'.join(varlist) # user=admin&age=20&phone=133


# 2。 用列表推到式完成 把列表中的所有字符全部转为小写
# ['AAAAA','bbBb','CCCcc'] ==> ['aaaaa','bbbbb','ccccc']
varlist = ['AAAAA','bbBb','CCCcc']
newlist = [i.lower() for i in varlist]
# print(newlist) # ['aaaaa', 'bbbb', 'ccccc']


# 3。 x 是0-5之间偶数,y是0-5之间奇数,把x,y组成一个元组,放到列表中
# newlist = []
# for x in range(6):
#     for y in range(6):
#         if x % 2 == 0 and y % 2 == 1:
#             newlist.append((x,y))
# print(newlist)

# 使用列表推到式完成
# newlist = [(x,y) for x in range(6) for y in range(6) if x % 2 == 0 and y % 2 == 1]
# print(newlist)


# 4。 使用列表推到式 完成 九九乘法表

# 正序
# newlist = []
# for i in range(1,10):
#     for j in range(1,i+1):
#         res = f'{i}*{j}={i*j}'
#         newlist.append(res)

# python 中 可以一行代码 完成九九乘法表
newlist = [f'{i}*{j}={i*j}' for i in range(1,10) for j in range(1,i+1)]
# print(newlist)

# 5。 求M,N中矩阵和元素的乘积
'''
M=[
    [1,2,3],
    [4,5,6],
    [7,8,9]
]

N = [
    [2,2,2],
    [3,3,3],
    [4,4,4]
]
实现乘积的结果
(1)==> [2,4,6,12,15,18,28,32,36]
(2)==> [[2,4,6],[12,15,18],[28,32,36]]
'''



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值