一、什么是列表?
列表是Python中非常重要的内置数据类型,由一系列元素组成。列表和元组也叫做序列,字典又可以叫做映射,元组和字典后续讲解。
创建方式:使用中括号或者调用list(list是指类型,而不是函数)
[11,'22','fer',{'e':3,'f':4}]
print(list('Hello'))
#输出:
['H', 'e', 'l', 'l', 'o']
使用字符串的join方法,将列表转换成字符串。
a = ['H', 'e', 'l', 'l', 'o']
print(''.join(a))
#输出:
Hello
列表:a = ['a', 'b', 'c', 'd', 'e', 'f']
列表特点:有序,索引对应一个数据,可以保存重复数据,可以保存任意数据类型。
二、列表的操作
1、切片
格式:列表名[start: stop: step],start开始位置(可为正负),stop结束位置(可为正负),step步长(可为正负)
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(num[8:12]) ##[9, 10] 其中stop可以超过最大索引
print(num[-3:]) ##[8, 9, 10]
print(num[:3]) ##[1, 2, 3]
print(num[:]) ##[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 复制整个切片
step步长为正 从左向右操作,为负 从右向左操作。
print(num[0:10:1]) ##[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(num[0:10:2]) ##[1, 3, 5, 7, 9]
print(num[10:0:-2]) ##[10, 8, 6, 4, 2]
print(num[-3:0]) ##[]
注意:步长为正,上例中执行切片操作时,如果第一个索引指定的元素位于第二个
索引指定的元素后面(在这里,倒数第3个元素位于第1个元素后面),结果就为空序列。
print(num[3:6:-1]) ##[]
注意:步长为负,上例中执行切片操作时,如果第一个索引指定的元素位于第二个
索引指定的元素后面(在这里,倒数第3个元素位于第1个元素后面),结果就为空序列。
当步长为负数时不为空
print(num[-3:0:-1])
输出:
[8, 7, 6, 5, 4, 3, 2]
2、序列相加:不能拼接不同类型的序列。
print([1, 2, 3] + [4, 5, 6])
输出:
[1, 2, 3, 4, 5, 6]
print('hello,' + 'world!')
输出:
'hh, www'
3、乘法:将序列与数x相乘时,将重复这个序列x次来创建一个新序列
print('python' * 3)
#输出:
pythonpythonpython
print([18] * 3)
#输出:
[18, 18, 18]
#空列表:[]
#包含3个元素,但是没有内容的列表
[None] * 3
#输出:
[None, None, None]
4、内置函数len、min和max
其中函数len返回序列包含的元素个数,而min和max分别返 回序列中最小和最大的元素
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(len(num)) #10
print(max(num)) #10
print(min(num)) #1
num = 'fasfd'
print(len(num)) #5
print(max(num)) #s
print(min(num)) #a
作用于字符串最小最大元素对应字符的ASCII码
5、列表元素增加操作
append方法用于将一个对象附加到列表末尾。
list1= [1, 2, 3, 4, 5]
list1.append(6)
print(list1)
#输出:
[1, 2, 3, 4, 5, 6]
extend方法能够同时将多个值附加到列表末尾,为此可将这些值组成的序列作为参数提供给方法extend。可使用一个列表来扩展另一个列表。
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a)
输出:
[1, 2, 3, 4, 5, 6]
使用加号扩充列表
a = [1, 2, 3]
b = [4, 5, 6]
a + b
print(a)
输出:
[1, 2, 3, 4, 5, 6]
鉴于常规使用加号的拼接必须使用a和b的副本创建一个新列表,拼接的效率将比 extend低。a = a + b,拼接操作并非就地执行的,即它不会修改原来的列表。
要获得与extend相同的效果, 可将列表赋给切片,如下所示
a = [1, 2, 3]
b = [4, 5, 6]
a[len(a):] = b
这虽然可行,但可读性不是很高。
insert 方法用于将一个对象插入列表。
insert(index, obj) 没有返回值
index -- 对象obj需要插入的索引位置。
obj -- 要插入列表中的对象。
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num.insert(1, 'Baidu')
print(num)
输出:
[1, 'Baidu', 2, 3, 4, 5, 6, 7, 8, 9, 10]
6、列表元素删除操作
del 语句来删除列表的的元素
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del num[3]
print(num)
输出:
[1, 2, 3, 5, 6, 7, 8, 9, 10]
del numbers[1:4]
print(num)
输出:
[1, 6, 7, 8, 9, 10]
clear方法 就地清空列表的内容。
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num.clear()
print(num)
输出:
[]
num.clear() 类似于切片赋值语句num[:] = []。
pop方法从列表中删除一个元素(默认末尾为最后一个元素),可以指定索引位置,并返回这一元素。
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num.pop()
print(num)
输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
num.pop(3)
print(num)
输出:[1, 2, 3, 5, 6, 7, 8, 9]
pop是唯一既修改列表又返回一个非None值的列表方法。列表为空会报错。
使用pop可实现一种常见的数据结构——栈(stack),后进先出(LIFO)。
Python没有提供push,但可使用append来替代。方法pop和append的效果相反,因此将刚弹出的值压入(或附加)后,得到的栈将与原来相同。
remove方法 用于删除第一个为指定值的元素。如果删除的元素不存在会报错:ValueError。remove是就地修改且不返回值的方法之一。
num = [1, 2, 3, 4, 5, 3]
num.remove(3)
print(num)
输出:
[1, 2, 4, 5, 3]
通过给切片赋值实现删除
#使用切片赋值还可在不替换原有元素的情况下插入新元素。
num = [1, 5]
num[1:1] = [2, 3, 4]
print(num)
输出:
[1, 2, 3, 4, 5]
#通过切片删除元素
num=[1, 2, 3, 4, 5]
num[1:4] = []
print(num)
输出:
[1, 5]
7、其他方法
copy方法 复制列表。常规等号复制只是将另一个名称关联到列表。
a = [1, 2, 3]
b=a
b[0] = 3
print(a)
输出:[3, 4, 3]
a = [1, 2, 3]
b=a.copy()
b[0] = 3
print(a)
输出:[1, 2, 3]
count方法计算指定的元素在列表中出现了多少次。
num=[1, 4, 3, 4, 5]
print(num.count(4)) # 2
index方法 在列表中查找指定值第一次出现的索引。
num=[1, 4, 3, 4, 5]
print(num.index(4)) # 1
reverse方法 按相反的顺序排列列表中的元素
num=[1, 4, 3, 4, 5]
num.reverse()
print(num)
输出:
[5, 4, 3, 4, 1]
sort方法 对原列表进行排序
sort( key=None, reverse=False)
key -- 你将其设置为一个用于排序的函数。然而,不会直接使用这个函数来
判断一个元素是否比另一个元素小,而是使用它来为每个元素创建一个 键,
再根据这些键对元素进行排序
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
num=[1, 4, 3, 4, 5]
num.sort()
print(num)
输出:[1, 3, 4, 4, 5]
方法sort用于对列表就地排序。就地排序意味着对原来的列表进行修改,使其元素按顺序排列,而不是返回排序后的列表的副本。如果要保留原来的列表,可以使用 b=num.copy(), b.sort(),原来num的顺序不变。
判断指定元素是否存在
元素 in 列表名,元素 not in 列表名。
num=[1, 4, 3, 4, 5]
print(3 in num) #True
print(3 not in num) #False
8、列表生成式
num = [i for i in range(6)]
print(num)
输出:
[0, 1, 2, 3, 4, 5
关注公众号同步更新: