Day_06-列表

什么是列表(list)

定义:python提供的容器型数据类型。
特点:可变,有序
可变:元素的值,列表长度,元素的顺序(支持增删改)
有序:每个元素通过下标确定位置(切片和索引)

列表的字面量:通过[]括起来,里面有多个元素,每个元素用逗号隔开
注意:元素可以是任意数据类型,元素数据类型可以互不相同

任何类型的数据都可以作为列表的元素
list1 = [339, 'dfdk', True, [1,2,3], {'a':10}, lambda x: 2*x]
print(len(list1))

list2 = [
    90,
    10.34,
    'hello'
]

abc = [1, 10]
list3 = [abc, 20]
print(list3)

一、获取列表元素(语法=字符串)

a.获取单个元素
用法:列表[下标] - 获取列表中指定下标的元素
输出:列表

list1 = [23, 232, 22, 'dfj']
print(list1[0], list1[-1])

b.获取部分元素(切片)
用法:列表[开始下标:结束下标:步长]
输出:列表
注意:切片切不到,结果是空列表[]

遍历:一个一个的取出元素

直接遍历元素:通过for循环直接遍历列表拿到每个元素(操作元素与下标无关)
遍历下标拿到元素:通过遍历列表元素中的下标来遍历列表元素(操作下标与下标有关)

list1 = [23, 232, 22, 'dfj']
# 直接遍历
for item in list1:
    print(item)

# 通过下标遍历
for index in range(len(list1)):
    print('下标', index)
    print(list1[index])

"""

二、 增删改

1.增(添加列表元素)
a.append:
作用:在最后添加指定的元素
用法:列表.append(元素)
注意:这个操作不会产生新列表

anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
anime.append('一圈超人')
print(anime)    # ['海贼王', '火影忍者', '一人之下', '秦时明月','一圈超人']

b.insert:
作用:指定下标前插入元素
用法:
列表.insert(下标, 元素) - 指定下标前插入元素

anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
anime.insert(2, '犬夜叉')
print(anime)  #  ['海贼王', '火影忍者', '犬夜叉','一人之下', '秦时明月']
anime.insert(0, '进阶的巨人')
print(anime)  # [ '进阶的巨人','海贼王', '火影忍者', '犬夜叉','一人之下', '秦时明月']

2.删(删除元素)
a.del
作用: 删除指定下标对应的元素
用法:del 列表[下标]
说明:

del:关键字 - 可以删除任何数据

注意:不会产生新的列表,下标会重新分配
下标不能越界,否则会报错

anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
del anime[-2]
print(anime)   #  ['海贼王', '火影忍者',  '秦时明月']
# del anime[100]
# IndexError: list assignment index out of range
# 下标错误:列表元素下标超过范围

b.remove:
用法:
列表.remove(元素) - 删除第一个指定元素
注意:元素重复,只删第一个,而且删除的元素必须存在,否则报错

anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
anime.remove('海贼王')
print(anime)   #  ['火影忍者', '一人之下', '秦时明月']

c.pop:
用法:
列表.pop() - 将列表中最后一个元素取出
列表.pop(下标) - 将列表中指定下标对应的元素取出
返回值:元素

anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
del_item = anime.pop()    # 默认最后的元素
print(anime)    #  ['海贼王', '火影忍者', '一人之下']
print(del_item)   # 秦时明月
del_item = anime.pop(0)   # 指定下标的元素
print(anime)   #  ['火影忍者', '一人之下']
print(del_item)   # 海贼王

坑1:直接遍历元素:

删除序列部分元素,删不去,直接删元素会改变序列的长度

解决办法:
遍历序列的切片(产生新的列表)

坑2 :通过下标取元素:

下标越界和元素不全

解决办法:
while循环来做
当元素要删除,下标值不动
不需删除,下标加1

前提:当列表需要删除时,才考虑坑

# 简写方式:列表[:](切片)== 浅拷贝
for x in age[:]:
    if int(x) < 18:
        age.remove(x)
print(age)
# 遍历下标
ages = [12, 13, 43, 45, 10]
new_ages = []
index = 0
while index < len(ages):
    age = ages[index]
    # 判断下标是否加1
    if age < 18:
        del_item = ages.pop(index)
        new_ages.append(del_item)
    else:
        index += 1  # 不需要删除下标增加
print(ages, new_ages)

3.改(修改元素的值)
用法:
列表[下标] = 新值 - 修改指定下标对应的值

list1 = [1, 2, 2, 4]
list1[0] = 'dadf'
print(list1) # ['dadf', 2, 2, 4]

三、列表相关运算

1. 相关运算:+, *
+:
列表1 + 列表2 - 将两个列表的元素进行拼接,产生一个新的列表
*:
列表*n - 将列表中的元素重复n次,产生一个新的列表

b.支持比较运算
和字符串的原理类似
每对元素的类型要一样*

2 in / not in (强调!!!!)
元素 in 列表 - 判断列表中是否存在指定的元素
和字符串不同,元素
元素 not in 列表 - 判断列表中是否存在指定的元素
应用:判断一个列表的元素是否存在于另一个列表中

print([1, 2] in [1, 2, 3])  # False
print([1, 2] in [[1, 2], 30, 'abc'])    # True
print([1, 2] not in [1, 2, 3])    # True

3 list
list(数据) - 将其他类型的数据转换成列表;
数据是否能转? - 只有序列才能转换成列表
怎么转? - 使用list(数据)
原理:将序列中所有的元素转换成列表的元素
注意:不能用类型名来作为变量名,否则会有隐患

list1 = list('hello')   
print(list1)   # ['h', 'e', 'l', 'l', 'o']
str1 = str(list1)  # 字符串只是单纯的在外面加‘’
print(str1)

4 序列其他方法
max(序列) - 获取序列中最大的元素
min(序列) - 获取序列中最小的元素
sum(序列) - 求序列中所有元素的和
要求:序列中的元素类型必须一致,并且类型支持比较运算和
加法运算,一般是(数字序列)

print(max([12, 244, 431, 343]))   # 431
print(min([12, 244, 431, 343]))   # 12
print(sum([12, 244, 431, 343]))   # 1030
print(sum(range(101)))    # 5050

四、列表内置函数

通过- > 列表.函数名() 来调用
序号 函数名 作用
1 count(obj) 统计某元素在列表中出现的次数
2 extend(seq) 在列表末尾一次追加另一个列表中的多个值
3 index(obj) 获取元素在列表中第一个匹配的下标值
4 reverse() 将列表元素反向
5 sort(cmp=None, key=None, reverse=False) 将列表元素进行排序
6 clear() 将列表清空
7 copy 复制列表(顶层)

1.count(obj)
作用:统计某元素在列表中出现的次数
输入:列表中的元素
输出:数字

list1 = [12, 32, 4, 23, 44, 12, 45, 8, 23]
print(list1.count(12))   # 2

2.extend(seq)
作用:在列表末尾追加另一个序列的所有元素
输入:序列
输出:None

注意:该方法没有返回值,只会直接在列表末添加元素

list1 = [12, 34, 48, 23, 45]
list2 = ['abc', '这谁好帅']
print(list1.extend(list2))  # None
print(list1)  # [12, 34, 48, 23, 45, 'abc', '这谁好帅']

3.index(obj)
作用:获取元素在列表中第一个匹配的下标值
输入:元素
输出:数字

list1 = ['这是谁', '好帅', '低调', '好的', '好烦', '帅了一生']
print(list1.index('好帅'))   # 1

4.reverse()
作用:将列表元素反向
输出:None

注意:该方法没有返回值,只会将原列表反向

list1 = ['这是谁', '好帅', '低调点', '好的', '好烦', '帅了一生']
print(list1.reverse())   # None
print(list1)  # ['帅了一生', '好烦', '好的', '低调点', '好帅', '这是谁']

5.sort(cmp=None, key=None, reverse=False)
作用:对列表元素进行排序
说明:
reverse:反向
输出:None

注意:该方法没有返回值,只会将原列表进行修改

list1 = [12, 32, 4, 3, 44, 222, 45, 8, 13]
print(list1.sort())   # None
print(list1)   # [3, 4, 8, 12, 13, 32, 44, 45, 222]
print(list1.sort(reverse=True))  # None
print(list1)   # [222, 45, 44, 32, 13, 12, 8, 4, 3]

6.clear()
作用: 清空列表
输出:None

注意:该方法没有返回值,只会将原列表进行修改

list1 = [12, 32, 4, 3, 44, 222, 45, 8, 13]
print(list1.clear())  # 
print(list1)   # []

7.copy
作用: 复制列表
输出:一个新的列表

list1 = [12, 32, 4, 3, 44, 222, 45, 8, 13]
print(list1.copy())  
# [12, 32, 4, 3, 44, 222, 45, 8, 13]
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.列表 1.1.修改列表元素 通过下标获取元素,然后重新赋值:列表名[下标] = 新的值注意:下标不能越界 1....
    我是一只菜鳥阅读 369评论 0赞 4
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,888评论 0赞 5
  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 6,087评论 2赞 16
  • 写在前面 小编在开发过程中从原生的jq+css写代码,到vue-cli脚手架搭建项目,都遇到了跨域问题,之前解决跨...
    郝艳峰Vip阅读 3,089评论 0赞 14
  • 在印度有一个规定,如果租客在一个地方租房超过一年,房东不能随便把租客赶走,在颁布之初是为了保护租客的利益,但是最后...
    Sunny飞镜阅读 189评论 0赞 0

友情链接更多精彩内容