python容器类型——列表(list)
特点
列表是处理一组有序项目的数据结构
列表可以包含任何类型的对象:字符串、数字甚至其他列表
列表是可变的数据类型
定义
列表通过方括号中用逗号分割的项目
mylist = [1, 2]
print(mylist)
# [1, 2]
print(mylist, type(mylist))
# [1, 2] <class 'list'>
列表可装入python的任何对象
mylist = [1, 'a', 1.1, None, [1,2], False]
print(mylist)
# [1, 'a', 1.1, None, [1, 2], False]
列表的基本操作
索引
通过下标访问列表中的元素,下标从0开始计数,可取出一个元素
print(mylist[3])
# None
print(mylist[-3])
# None
下标不能越界
超出索引值时会报IndexError错误
print(mylist[10])
IndexError Traceback (most recent call last)
Input In [20], in <cell line: 1>()
----> 1 print(mylist[10])
IndexError: list index out of range
切片
切片是通过下标访问列表中的元素,切片可以取出一个子列表
字符串的切片:split()函数,默认空格为分隔符,切片后放入列表中
mystr = "Hello Cali Today is Sunday"
mylist = mystr.split()
print(mylist, type(mylist))
# ['Hello', 'Cali', 'Today', 'is', 'Sunday'] <class 'list'>
切片包含开始,不包含结束
切片取值 => 没有下标越界问题
print(mylist[2:])
# ['Today', 'is', 'Sunday']
print(mylist[2:5:1])
# ['Today', 'is', 'Sunday']
print(mylist[2:15:1])
# ['Today', 'is', 'Sunday']
输出’Cali’, ‘Hello’
print(mylist, type(mylist))
# ['Hello', 'Cali', 'Today', 'is', 'Sunday'] <class 'list'>
print(mylist[::-1])
# ['Sunday', 'is', 'Today', 'Cali', 'Hello']
print(mylist[1::-1])
# ['Cali', 'Hello']
print(mylist[-4::-1])
# ['Cali', 'Hello']
slice函数
slice函数的用途:生成一个slice对象,相当于可以给要切的内容取个名字。
sub_list = slice(-4,0,-1)
print(mylist[sub_list])
# ['Cali']
练习
a = ['apple', 'orange', 123, 0.111, 'cali']
print(a[1:])
# ['orange', 123, 0.111, 'cali']
print(a[2:6]) # 切片可以越界
# [123, 0.111, 'cali']
print(a[1:-3])
# ['orange']
print(a[0], a[-1])
# apple cali
a[:]
# ['apple', 'orange', 123, 0.111, 'cali']
增加
append
在末尾,作为整体追加,类型不限
help(a.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
mylist = [0, 1, 2, 3]
mylist.append("apple")
print(mylist)
# [0, 1, 2, 3, 'apple']
mylist.append([4,5])
print(mylist)
# [0, 1, 2, 3, 'apple', [4, 5]]
使用mylist.append()之后会自动把结果返回给mylist,不需要手动重新赋值
insert
在index位置插入数据, 2个参数(索引,插入的元素)
help(mylist.insert)
Help on built-in function insert:
insert(index, object, /) method of builtins.list instance
Insert object before index.
mylist.insert(0, "banana")
print(mylist)
# ['banana', 0, 1, 2, 3, 'apple', [4, 5]]
mylist.insert(2, "orange")
print(mylist)
# ['banana', 0, 'orange', 1, 2, 3, 'apple', [4, 5]]
extend
扩展,将1个列表里的内容扩展到另外一个列表里去
只限可转为list的类型( str, list, tuple )
help(a.extend)
Help on built-in function extend:
extend(iterable, /) method of builtins.list instance
Extend list by appending elements from the iterable.
mylist2 = ["cali", "leimingtao", "xiaowei"]
mylist.extend(mylist2)
print(mylist)
# ['banana', 0, 'orange', 1, 2, 3, 'apple', [4, 5], 'cali', 'leimingtao', 'xiaowei']
mylist.extend("abc")
print(mylist)
# ['banana', 0, 'orange', 1, 2, 3, 'apple', [4, 5], 'cali', 'leimingtao', 'xiaowei', 'a', 'b', 'c']
mylist.extend(12)
print(mylist)
# TypeError: 'int' object is not iterable
int 不是可迭代对象 =》迭代 -》依次从对象中取出元素
extend和+的区别
extend会对mylist做修改
+ 会产生一个新的列表 ,不会对mylist做修改
mylist3=['weihong', 'liyili']
print(mylist+mylist3)
# ['banana', 0, 'orange', 1, 2, 3, 'apple', [4, 5], 'cali', 'leimingtao', 'xiaowei', 'a', 'b', 'c', 'weihong', 'liyili']
print(mylist)
# ['banana', 0, 'orange', 1, 2, 3, 'apple', [4, 5], 'cali', 'leimingtao', 'xiaowei', 'a', 'b', 'c']
使用‘+’时,只能连接两个相同类型的元素
mylist+"abc"
# TypeError: can only concatenate list (not "str") to list
删除
pop
删除元素,默认最后一个(指定index删除)
指定索引
使用pop函数后会返回删除掉的元素
print(mylist)
# ['banana', 0, 'orange', 1, 2, 3, 'apple', [4, 5], 'cali', 'leimingtao', 'xiaowei', 'a', 'b', 'c']
mylist.pop()
# 'c'
mylist.pop(7)
# [4, 5]
print(mylist)
# ['banana', 0, 'orange', 1, 2, 3, 'apple', 'cali', 'leimingtao', 'xiaowei', 'a', 'b']
remove
指定删除的数据
删除指定的元素(要删除的数据不存在时,会出错)
使用remove函数不会返回值
mylist.remove('a')
print(mylist)
# ['banana', 0, 'orange', 1, 2, 3, 'apple', 'cali', 'leimingtao', 'xiaowei', 'b']
mylist.remove('appel')
# ValueError: list.remove(x): x not in list
del
根据下标删除
del是命令,不是内置函数
del是python的一个关键字,用于删除变量(的引用)
del mylist[1]
print(mylist)
# ['banana', 'orange', 1, 2, 3, 'apple', 'cali', 'leimingtao', 'xiaowei', 'b']
del也可以直接删除列表
del mylist3
print(mylist3)
# NameError: name 'mylist3' is not defined
clear
清空列表
print(mylist3)
# ['weihong', 'liyili']
mylist3.clear()
print(mylist3)
# []
修改
修改元素主要是利用下标和切片来修改或增加、删除
直接利用下标修改元素
print(mylist)
# ['banana', 'orange', 1, 2, 3, 'apple', 'cali', 'leimingtao', 'xiaowei', 'b']
mylist[2] = "liu"
print(mylist)
# ['banana', 'orange', 'liu', 2, 3, 'apple', 'cali', 'leimingtao', 'xiaowei', 'b']
用切片修改列表中的元素
mylist[3:5] = ["shenjiemi", "xiejiaxing"]
print(mylist)
# ['banana', 'orange', 'liu', 'shenjiemi', 'xiejiaxing', 'apple', 'cali', 'leimingtao', 'xiaowei', 'b']
也可以使用切片增加列表中的元素
mylist[-1:] = ["lili", "xiaoqian", "xiaoming"]
print(mylist)
# ['banana', 'orange', 'liu', 'shenjiemi', 'xiejiaxing', 'apple', 'cali', 'leimingtao', 'xiaowei', 'lili', 'xiaoqian', 'xiaoming']
使用切片删除列表中的元素
mylist[0:5]=""
print(mylist)
# ['apple', 'cali', 'leimingtao', 'xiaowei', 'lili', 'xiaoqian', 'xiaoming']
mylist[0:5]=[]
print(mylist)
# ['xiaoqian', 'xiaoming']
print(mylist[1:1])
返回的值为空[],此时这个位置在第二个位置
使用切片方法时,字符串是可迭代对象
mylist[1:1]="abc" # 在第二个位置插入元素
print(mylist)
# ['xiaoqian', 'a', 'b', 'c', 'xiaoming']
mylist[1:1] = "abc" # 批量在指定位置增加数据
mylist[0:5] = "" # 批量指定下标的删除数据
print(mylist)
# ['b', 'c', 'xiaoming']
反转
reverse
mylist.reverse()
print(mylist)
# ['xiaoming', 'c', 'b']
切片方法
print(mylist[::-1])
# ['b', 'c', 'xiaoming']
排序
sort
列表中的元素必须是相同类型的才能排序
mylist = [3, 5, 8, 1, -3]
mylist.sort()
print(mylist)
# [-3, 1, 3, 5, 8]
排序之后使用reverse可以使结果反转
mylist.sort(reverse=True)
print(mylist)
# [8, 5, 3, 1, -3]
mylist = ["apple", "orange", "banana"]
mylist.sort()
print(mylist)
# ['apple', 'banana', 'orange']
不同类型的元素排序会报错
mylist = ['a', 1, 2, 3]
mylist.sort()
# TypeError: '<' not supported between instances of 'int' and 'str'
统计
len
计算列表中元素的个数
不用输出,直接返回值
mylist = ['a', 1, 2, 3]
len(mylist)
# 4
count
计算某个元素在列表中出现的次数
print(mylist5)
# ['a', 'b', 'c', 'd', 'a', 'b', 'd', 'java', ['liu', 'cali', 123, 456], 'C', 'a']
mylist5.count('a')
# 3
index
找出某个元素在列表中第一次出现的下标位置
mylist5.index("a")
# 0
mylist5.index("java")
# 7
练习
mylist5 = ["python", "java", "C"]
mylist5.append("我是追加")
print(mylist5)
# ['python', 'java', 'C', '我是追加']
mylist5.pop()
# '我是追加'
del mylist5[0]
print(mylist5)
# ['java', 'C']
mylist5.insert(1, ["liu", "cali", 123, 456])
print(mylist5)
# ['java', ['liu', 'cali', 123, 456], 'C']
遍历列表
遍历:依次取出对象中的每一项数据
list是一个可迭代对象(iterable),可以直接用for遍历
print(mylist5)
# ['a', 'b', 'c', 'd', 'a', 'b', 'd', 'java', ['liu', 'cali', 123, 456], 'C', 'a']
for item in mylist5:
print(item)
a
b
c
d
a
b
d
java
['liu', 'cali', 123, 456]
C
a
enumerate
枚举
enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用
for item in enumerate(mylist5):
print(item)
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'a')
(5, 'b')
(6, 'd')
(7, 'java')
(8, ['liu', 'cali', 123, 456])
(9, 'C')
(10, 'a')
判断成员关系
判断列表中是否有某个数据
print(mylist5)
# ['a', 'b', 'c', 'd', 'a', 'b', 'd', 'java', ['liu', 'cali', 123, 456], 'C', 'a']
print("Java" in mylist5)
# False
print("java" in mylist5)
# True
类型转换
list将字符串(str)转列表(list)
mystr = "abc"
print(list(mystr))
# ['a', 'b', 'c']
利用join函数将列表转字符串
mylist = ['a', 'b', 'c']
mystr = "".join(mylist)
print(mystr)
# abc
练习
nums = [2, 7, 11, 15]
target = 9
for (i,item) in enumerate(nums):
for (j,itemj) in enumerate(nums):
if (item + itemj == target) and i < j:
result = [i, j]
print(result)
# [0, 1]
ava" in mylist5)
False
print(“java” in mylist5)
True
### 类型转换
#### list将字符串(str)转列表(list)
```python
mystr = "abc"
print(list(mystr))
# ['a', 'b', 'c']
利用join函数将列表转字符串
mylist = ['a', 'b', 'c']
mystr = "".join(mylist)
print(mystr)
# abc
练习
[外链图片转存中…(img-PeFS6U1S-1649680081422)]
nums = [2, 7, 11, 15]
target = 9
for (i,item) in enumerate(nums):
for (j,itemj) in enumerate(nums):
if (item + itemj == target) and i < j:
result = [i, j]
print(result)
# [0, 1]