1、列表的总结
2、列表基础
2.1、列表表示 []
- alist = ["a", "b", 1]
列表中的元素,可以是不同类型的数据类型。
2.2、列表是可变对象类型
可变对象是指,可“原地”修改列表。
需要注意的是:赋值、切片操作、浅拷贝、深拷贝等不同情况下,对列表自身的影响。
3、列表常用方法
列表是可变对象,对列表的很多操作,会在原来列表中直接修改,调用列表的常用方法会,返回的是None。
3.1、列表的切片操作
切片会重新分配新的内存空间。
切片:list[start:stop:step],包括start,不包括stop,step为步长,默认为1
可正序排列输出
也可倒序排列输出
# 分配新的内存空间,alist和blist是2个独立的内存空间
alist = ["a", "b", "c", 1]
blist = alist[:]
# 指定start和end切片开始和结束位置,左闭右开
clist = alist[0:3]
# 提取最后元素
element = alist[-1]
# 从后往前提取
dlist = alist[]
3.2、查找元素index
- index(object[, start, end]):返回第1个object在列表中的下标,如未找到,会报错ValueError
alist = ["a", "b", 1, "c"]
result = alist.index("b")
>> 1
result1 = alist.index("M")
>> ValueError: 'M' is not in list
3.3、新增元素append、extend、insert
- append(obj)
- extend(iterable)
- insert(index, obj)
以上函数返回为None,会直接在原来列表中修改。
alist = ["a", "b", "c", 1]
alist.append("M")
# 为iterable就行,不一定为list
test = ("a", "b", "c")
alist.extend(test)
alist.insert(0, "HH")
print(alist)
>> ["HH", "a", "b", "c", 1, "M", "a", "b", "c"]
3.4、删除元素clear、pop、remove
- clear():返回None,删除列表中全部元素
- pop([index]):返回删除的元素,默认删除最后一个元素,如果列表为空或index越界,会报错IndexError
- remove(obj):返回None,删除obj,如果obj不在列表中,会报错ValueError
会直接修改列表元素,更改原来的列表。
alist = ["a", "b", "c", 1]
alist.pop()
alist.remove("M")
alist.clear()
>> []
3.5、复制元素copy
- copy():返回新复制的列表,分配新的内存空间,同全部切片[:]
alist = ["a", "b", "c", 1]
# 返回新的列表result,为result重新分配新的内存空间
result = alist.copy(alist)
3.6、元素计数count
- count(obj):返回列表中obj的个数
alist = ["a", "a", "b", "c", "a"]
alist.count("a")
>> 3
3.7、排序列表reverse、sort
- reverse():返回None,反向列表中的元素
- sort():返回None,对列表中元素排序,列表中的元素需要同一数据类型
返回为None,会直接原地修改列表。
alist = ['Google', 'Runoob', 'Taobao', 'Facebook']
result = alist.sort()
>> ['Facebook', 'Google', 'Runoob', 'Taobao']
4、列表和其他数据类型转换
4.1、列表和字符串转换
内置方法list,可将序列类转换为列表。序列类包括字符串、列表、元组、字典、 集合,其中字典类的,会将字典的key转换为列表。
4.2、列表和元组转换
内置方法tuple,可将序列转换为元组。序列类包括字符串、列表、元组、字典、 集合,其中字典类的,会将字典的key转换为元组。
5、列表生成式
使用如下:
alist = [x+1 for i in range(10)]
>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
注意对比,如将上面中的中括号[]改为括号(),那么此时不在为列表表达式,而是生成器。有关生成器的内容可参考:https://mp.csdn.net/editor/html/111184526
可以比较列表生成式和生成器的区别,2者占用内存空间如下,生成器占用较少的内存空间。
import sys
alist = [x for x in range(10)]
print(sys.getsizeof(alist))
gen = (x for x in range(10))
print(sys.getsizeof(gen))