Python学习笔记------列表

本文详细介绍了Python中的列表数据类型,包括列表的性质(有序、可变),创建和初始化列表,下标和切片操作,遍历列表的方法,以及如何进行列表的添加、修改、删除和查找元素。此外,还涉及到了列表的排序、计数、求和、去重和比较大小等操作,最后提到了列表推导式的应用。

Python中的容器之列表:

列表的性质:

a.列表是一个有序的容器型数据类型(有序代表列表中每个元素有自己的固定位置:下标)。

b.列表是一个可变的容器型数据类型(可变代表列表中元素可以被修改:增删改)。

c.列表使用[],列表中元素之间使用,逗号隔开

d.列表的数据类型:list

e.列表中可以存放任意类型的数据。

创建一个列表

list1 = []
下标和切片:
下标:每个元素都有自己的位置。从左向右:正向下标,从0开始递增。从右向左:负向下标,从-1开始递减。

如:

list2 = [100, 200, 300, 400, 500]
# 正向下标:0    1    2    3    4
# 负向下标:-5   -4   -3   -2   -1
# 通过下标获取元素:语法 --> 容器[下标]
print(list2[2], list2[-3])
# 注意:下标不要越界。
# print(list2[100]) # list index out of range

输出:

300 300
切片:能够从原容器中获得新的子容器(从原容器中获取N个元素组成新的容器)

切片语法:
容器[start:stop:step]

start:开始参数,默认为0,可以省略不写;

stop:结束参数,当要获取最后一个元素时,可以不写;

step:步长,决定下一个被获取元素的下标,默认为1,可以省略不写。

切片也是一个左闭右开区间,下一个被获取元素的下标 = 当前被获取元素的下标 + step。
当step>=1时,start代表的元素必须在stop代表的元素左侧;
当step<=-1时,start代表的元素必须在stop代表的元素右侧。

如:

games = ['lol', '王者荣耀', 'PUBG', 'CF', 'DNF', 'QQ飞车']
print(games[1:5])
print(games[1:6], games[1:])
print(games[0:3], games[:3])
print(games[:])
print(games[::2])

print(games[::-1], games[-1::-1])
print(games[::-2])

print(games[1:-2])

输出

['王者荣耀', 'PUBG', 'CF', 'DNF']
['王者荣耀', 'PUBG', 'CF', 'DNF', 'QQ飞车'] ['王者荣耀', 'PUBG', 'CF', 'DNF', 'QQ飞车']
['lol', '王者荣耀', 'PUBG'] ['lol', '王者荣耀', 'PUBG']
['lol', '王者荣耀', 'PUBG', 'CF', 'DNF', 'QQ飞车']
['lol', 'PUBG', 'DNF']
['QQ飞车', 'DNF', 'CF', 'PUBG', '王者荣耀', 'lol'] ['QQ飞车', 'DNF', 'CF', 'PUBG', '王者荣耀', 'lol']
['QQ飞车', 'CF', '王者荣耀']
['王者荣耀', 'PUBG', 'CF']
列表的遍历:

1.直接遍历:

list1 = ['阿甘正传', '海王', '阿凡达', '霸王别姬', '憨豆特工', '红海行动']
for i in list1:
    print(i)

2.间接遍历:

list1 = ['阿甘正传', '海王', '阿凡达', '霸王别姬', '憨豆特工', '红海行动']
print(len(list1))
#len():能够查看容器中元素个数(返回容器的长度)
for j in range(len(list1)):
    print(f'下标{j} --> 元素{list1[j]}')
列表的拼接和重复:
list1 = ['阿甘正传', '海王', '阿凡达', '霸王别姬', '憨豆特工', '红海行动']
list2 = ['战狼']
# 拼接
print(list1 + list2)
# 重复
print(list2 * 5)
# 列表性质补充:列表中可以出现重复元素。
列表的增删改查:

1.增加:append()从列表末尾开始添加元素;insert()指定位置插入元素
格式:

games = []
# append():向列表中追加元素
games.append('王者荣耀')
games.append('和平精英')

# insert:向列表中插入元素
games.insert(1, '天天酷跑')
print(games)

输出:

['王者荣耀', '天天酷跑', '和平精英']

2.修改:

格式:
容器[下标] = 新元素

games = ['王者荣耀', '天天酷跑', '和平精英']
games[1] = '欢乐斗地主'
print(games)

3.删除:del根据下标删除元素、remove()删除指定元素、pop()根据下标删除元素;clear清除列表。
格式:

games = ['王者荣耀', '欢乐斗地主', '和平精英']
del games[-1]

games.remove('王者荣耀')

content = games.pop(0)
print(content, games)
games.clear()

输出:

欢乐斗地主 []

PS:
删除操作:del、remove、clear等于电脑中直接删除文件。
而pop等于将文件删除时放入回收站,还可以再次恢复。

4.查找:index()用于从列表中查找指定下标的元素。可设置查找的起始位置。如果index找不到元素,则程序会报错。

格式:

list1 = [1, 2, 3, 4, 5, 6, 7, 5]
result = list1.index(5)
print(result)
result1 = list1.index(5, 6)
print(result1)

输出:

4
7

5.其他常用函数:

排序:sort:将列表从小到大排序,sort方法修改的是列表本身。
sorted:将列表从小到大排序,sorted方法不会修改列表本身。
reverse:能够将列表倒序,reverse修改的是列表本身。

添加:
extend:能够将容器中的元素全部添加到列表中。

格式:

# sort函数:
list1 = [1, 2, 3, 4, 5, 6, 7, 5]
list1.sort()
print(list1)
# 添加参数reverse=True,就可以从大到小排序
list1.sort(reverse=True)
print(list1)
# sorted函数:
list2 = [2, 4, 1, 0]
print(sorted(list2), list2)
# 同理添加参数reverse=True,就可以从大到小排序
print(sorted(list2, reverse=True), list2)
# reverse函数:
list4 = [1, 2, 3, 4, 5]
list4.reverse()
print(list4)
# extend函数:
list5 = []
list5.extend(list4)
list5.extend(range(0, 9, 2))
print(list5)

输出:

[1, 2, 3, 4, 5, 5, 6, 7]
[7, 6, 5, 5, 4, 3, 2, 1]
[0, 1, 2, 4] [2, 4, 1, 0]
[4, 2, 1, 0] [2, 4, 1, 0]
[5, 4, 3, 2, 1]
[5, 4, 3, 2, 1, 0, 2, 4, 6, 8]

计数:count:计数,统计列表中某个元素的出现次数

求和:sum:针对于数字列表(列表中全部都是数字的列表)求和。

查找最大、最小值:max、min。

list1 = [1, 2, 3, 4, 5, 6, 7, 5]
list1.count(2)
sum(list1)
t1 = max(list1)
t2 = min(list1)
列表之间比较大小:

1.列表比较大小比较的是列表中元素的大小。

2.列表中参与比较大小的元素位置是一一对应的。

3.从第一对元素开始比较,直到分出大小;否则,两个列表相等。

4.比较大小的元素必须是相同数据类型的。

list1 = [1, 2, 3, 4.897, [3, 4, 5, 6]]
list2 = [1, 2, 3, 4.897, [3, 4, 5, 6, 7]]
print(list1 > list2)

输出:

False
列表去重的多种方式:

一、间接去重:

names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
newNames = []
for i in names:
    if i not in newNames:
        newNames.append(i)
print(newNames)

输出:

['张三', '李四', '大黄']

二、for循环元素个数去重:

建议从后向前去重:

从前往后去重输出

names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
for i in names:
    if names.count(i) > 1:
        names.remove(i)
print(names)

输出:

['李四', '大黄', '张三', '张三', '李四']

从前往后去重输出

names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
for i in range(len(names) - 1, -1, -1):
    if names.count(names[i]) > 1:
        del names[i]
print(names)

输出:

['张三', '李四', '大黄']

原因分析:

for循环执行时,获取元素本质其实还是依据下标,
张三拿出来,下标为0;张三被删除,李四等后续所有元素下标对应减1,
此时for循环进行第二次循环,判断应该获取下标为1的元素,此时下标为1的元素为“大黄”。

三、while循环判断元素个数:

names = ['张三', '李四', '大黄', '张三', '张三', '李四', '大黄', '张三', '张三', '李四']
# x表示元素的下标
x = 0
while x <= len(names) - 1:
    if names.count(names[x]) > 1:
        del names[x]
    else:
        x += 1
print(names)

输出:

['大黄', '张三', '李四']
列表推导式:

可一次性生成有多个元素的列表

语法:

基本语法:[表达式 for 变量 in 容器]

带条件的列表推导式:[表达式 for 变量 in 容器 if 条件]

双重或多重循环:[表达式 for 变量 in 容器 for 变量 in 容器]

#示例
list1 = [i for i in range(1, 11)]
print(list1)
list2 = [i for i in range(1, 11) if i % 2 != 0]
print(list2)
list3 = [f'{x * y}' for x in range(1, 10) for y in range(1, x + 1)]
print(list3)

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 3, 5, 7, 9]
['1', '2', '4', '3', '6', '9', '4', '8', '12', '16', '5', '10', '15', '20', '25', '6', '12', '18', '24', '30', '36', '7', '14', '21', '28', '35', '42', '49', '8', '16', '24', '32', '40', '48', '56', '64', '9', '18', '27', '36', '45', '54', '63', '72', '81']
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻梦天殇272

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值