2. 基本数据结构-列表
程序员文章站
2022-06-24 14:05:17
一、列表定义 List(列表)是python中使用最频繁的数据类型。列表可以完成大多数的数据结构实现。列表中元素的类型可以不同。它支持数字/字符串/列表(嵌套)。列表是写在[]之间的,用逗号分隔开的元素列表,和字符串一样。列表同样可以被索引和切片,列表被切片后返回一个包含所需元素的新列表。而且列 ......
一、列表定义
list(列表)是python中使用最频繁的数据类型。列表可以完成大多数的数据结构实现。列表中元素的类型可以不同。它支持数字/字符串/列表(嵌套)。列表是写在[]之间的,用逗号分隔开的元素列表,和字符串一样。列表同样可以被索引和切片,列表被切片后返回一个包含所需元素的新列表。而且列表是有序的(按照你保存的顺序),有索引,可切片方便取值。python可存放32/64位,列表是可变数据类型,不可hash。
二、列表切片
1. 示意图
2. 列表切片操作
list = [ 'abcd', 786 , 2.23, 'run', 70.2 ] 1. 切片切得是什么类型,切后的数据就是什么类型 tinylist = [123, 'runoob'] print (list) # 输出完整列表 ['abcd', 786, 2.23, 'run', 70.2] print (list[0]) # 输出列表第一个元素 abcd print (list[1:3]) # 从第二个开始输出到第三个元素 [786, 2.23] print (list[2:]) # 输出从第三个元素开始的所有元素 [2.23, 'run', 70.2] print (tinylist * 2) # 输出两次列表 [123, 'run', 123, 'run'] print (list + tinylist) # 连接列表 ['abcd', 786, 2.23, 'run', 70.2, 123, 'run'] print(list1[-5:]) # 从第一元素取至最后一个,-5就是第一个元素['abcd', 786, 2.23, 'run', 70.2] print(list[-5::2]) #增加步长,隔一个取一个 ['abcd', 2.23, 70.2] print(list[-1::-2])# 倒着取值 [70.2, 2.23, 'abcd'] print(list[-1: ]) [70.2] 2.li = [1, 2, 3, 4, 5, 6, 7, 8, 9] li[2:5] = [11, 22, 33, 44, 55] print(li) 结果:[1, 2, 11, 22, 33, 44, 55, 6, 7, 8, 9]
三、列表操作
1. 添加
注意, list和str是不一样的. lst可以发生改变. 所以直接就在原来的对象上进行了操作
(1) append() - 尾部追加
lst = ["麻花藤", "林林俊杰", "周润发", "周芷若"] print(lst) lst.append("wusir") print(lst) lst = [] while true: content = input("请输入你要录入的员工信息, 输入q退出:") if content.upper() == 'q': break lst.append(content) print(lst) 备注: append()是浅拷贝 >>>alist = [] >>> num = [2] >>> alist.append( num ) >>> id( num ) == id( alist[0] ) true 如果使用 num[0]=3,改变 num 后,alist[0] 也随之改变。 如不希望,需要使用 alist.append( copy.deepcopy( num ) )
(2) insert() - 插入
lst = ["麻花藤", "张德忠", "孔德福"] lst.insert(1, "刘德华") # 在1的位置插入刘德华. 原来的元素向后移动一位 print(lst)
(3) extend() - 列表扩展
用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) 1. 语法 list.extend(seq) - seq:元素列表,可以是列表/元组/集合/字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾 2. 案例 list1 = ['google', 'runoob', 'taobao'] list2=list(range(5)) # 创建 0-4 的列表 list1.extend(list2) # 扩展列表 print ("扩展后的列表:", list1) 扩展后的列表: ['google', 'runoob', 'taobao', 0, 1, 2, 3, 4] 3. 其他案例 # 语言列表 language = ['french', 'english', 'german'] # 元组 language_tuple = ('spanish', 'portuguese') # 集合 language_set = {'chinese', 'japanese'} # 添加元组元素到列表末尾 language.extend(language_tuple) print('新列表: ', language) 新列表: ['french', 'english', 'german', 'spanish', 'portuguese'] # 添加集合元素到列表末尾 language.extend(language_set) print('新列表: ', language) 新列表: ['french', 'english', 'german', 'spanish', 'portuguese', 'japanese', 'chinese']
2. 删除
(1) pop()
用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值;list.pop([index=-1]) lst = ["麻花藤", "王剑林林", "李李嘉诚", "王富贵"] print(lst) # 默认删除最后一个 deleted = lst.pop() print("被删除的", deleted) print(lst) 结果: ['麻花藤', '王剑林林', '李李嘉诚', '王富贵'] 被删除的 王富贵 ['麻花藤', '王剑林林', '李李嘉诚'] # 删除2号元素 el = lst.pop(2) print(el) print(lst)
(2) remove()
用于移除列表中某个值的第一个匹配项 # 删除指定元素 lst.remove("麻花藤") print(lst) # 删除不存在的元素会报错 lst.remove("哈哈") print(lst) error: valueerror: list.remove(x): x not in list
(3) clear()
- 清空list
(4) 切片删除
del lst[1:3] print(lst)
3. 修改
lst = ["太白", "太黑", "五色", "银王", "日天"] lst[1] = "太污" # 把1号元素修改成太污 print(lst) lst[1:4:3] = ["麻花藤", "哇靠"] # 切片修改也ok. 如果步长不是1, 要注意元素的个数 print(lst) lst[1:4] = ["李李嘉诚个龟儿子"] # 如果切片没有步长或者步长是1. 则不用关心个数 print(lst)
4. 查询
1. index() 2.for el in lst: print(el)
四、其他操作
1. count()
list.count(obj) #语法 alist = [123, 'google', 'runoob', 'taobao', 123]; print ("123 元素个数 : ", alist.count(123)) print ("runoob 元素个数 : ", alist.count('runoob')) /结果: 123 元素个数 : 2 runoob 元素个数 : 1
2. len()
len(len) # 方法,返回列表个数 list1 = ['google', 'runoob', 'taobao'] print (len(list1)) list2=list(range(5)) # 创建一个 0-4 的列表 print (len(list2)) /结果: 3 5
3. list()
atuple = (123, 'google', 'runoob', 'taobao') list1 = list(atuple) print ("列表元素 : ", list1) str="hello world" list2=list(str) print ("列表元素 : ", list2) /结果: 列表元素 : [123, 'google', 'runoob', 'taobao'] 列表元素 : ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
4. reverse()
函数用于翻向列表中元素 list1 = ['google', 'runoob', 'taobao', 'baidu'] list1.reverse() print ("列表反转后: ", list1) /结果: 列表反转后: ['baidu', 'taobao', 'runoob', 'google']
5. sort()
list.sort(cmp=none, key=none, reverse=false)#该方法没有返回值,但是会对列表的对象进行排序 cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。 key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse -- 排序规则,reverse = true 降序, reverse = false 升序(默认) alist = ['google', 'runoob', 'taobao', 'facebook'] alist.sort() print ( "list : ", alist) /结果: list : ['facebook', 'google', 'runoob', 'taobao'] vowels = ['e', 'a', 'u', 'o', 'i']# 降序 vowels.sort(reverse=true) print ( '降序输出:', vowels ) /结果: 降序输出: ['u', 'o', 'i', 'e', 'a'] 列表的嵌套 li = ['李娜', '韩寒', 'aliex', ['妮妮', 23,'北京']] print(li[1][1]) # 取韩寒中的寒字 li[0] = li[0].capitalize() # 找的lina首字母大写,并将li中的lina替换掉 print(li) li[1] = li[1].replace('韩', '国') # 将韩寒的韩改成国 print(li) n = [1, 2, 'jack', 4, 5, 5, 6, 7, 78, 8, 9, 9] n[3:4] = 'tony alix' print(n) [1, 2, 'jack', 't', 'o', 'n', 'y', ' ', 'a', 'l', 'i', 'x', 5, 5, 6, 7, 78, 8, 9, 9] n[3:4] = ['tony', 'jone'] print(n) [1, 2, 'jack', 'tony', 'jone', 5, 5, 6, 7, 78, 8, 9, 9]
6. join
将列表转换为字符串 li = ["李嘉诚", "麻花藤", "林海峰", "刘嘉玲"] s = "_".join(li) # 循环遍历列表,把列表中的每一项用''_''拼接 print(s) 结果: 李嘉诚_麻花藤_林海峰_刘嘉玲 li = "花闺" s = "_".join(li) print(s) 结果: 花_闺
7. 列表循环删除
li = ['周芷若', '王兴', '周润发', '马云', '周星星'] li_new = [] # 创建一个新列表存储要删除的元素 for el in li: # 循环li,把姓周的装进li_new if el.startswith('周'): li_new.append(el) for el_new in li_new: # 循环新列表,删除li中的元素 li.remove(el_new) print(li) 结果:['王兴', '马云']
8. 列表浅拷贝
1. old = [1,[2,3]] new = old.copy() 2. old = [1,[2,3]] new = [i for i in old] 3. old = [1,[2,3]] new = [] for i in old: new.append(old[i]) 4. old = [1,[2,3]] new = old[:]