Python列表详解

基本概念:

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号“[]”内的逗号分隔值出现。
列表的数据项不需要具有相同的类型

注意:只有字符串是用单引号或双引号引起来的,列表中的数字,等其他非字符串元素不需用,也不能用单引号或双引号引起来。如下所示:
list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
列表中的值的分割也可以用到变量 [头下标 : 尾下标],就可以截取相应的列表。(注意顾头不顾尾

类型转换

但凡能够被for循环遍历的类型都可以当做参数传给list()转成列表

res=list('hello')
print(res)

res=list({'k1':111,'k2':222,'k3':3333})
print(res)

 

添加元素到列表

将新的元素追加到列表末尾(使用append()函数)

例如:
已有列表list元素如下:
list=['jesse','786', '2.23', 'john', '70.2']
现在需要在末尾加上zhangsan这个元素


##代码
list=['jesse','786', '2.23', 'john', '70.2']
list.append('zhangsan')
print(list)
##运行结果
['jesse', '786', '2.23', 'john', '70.2', 'zhangsan']

将新的元素从列表的任意位置插入(insert函数)

例如:
已有列表list元素如下:
list=['jesse','786', '2.23', 'john', '70.2']
现在需要将zhangsan这个元素插入在元素’jesse’后面一个(也就是1的位置)
#代码
list=['jesse','786', '2.23', 'john', '70.2']
list.insert(1,'zhangsan')  
print(list)
#执行结果
['jesse', 'zhangsan', '786', '2.23', 'john', '70.2']

//解释:
list.insert(1,'zhangsan') #在list列表中1的位置插入zhangsan这个元素,原先在1位置的元素自动向后移动一位
1表示想要在1位置插入
zhangsan是要插入的新的元素

现在根据上面再在zhangsan元素的后面一位插入yuan这个元素
分析一下,zhangsan这个元素现在在1的位置其后一位就是2,那我们就插在2位置上

//代码
list=['jesse','786', '2.23', 'john', '70.2']
list.insert(1,'zhangsan')
list.insert(2,'yuan')
print(list)
//运行结果
['jesse', 'zhangsan', 'yuan', '786', '2.23', 'john', '70.2']

删除列表中的元素

例如:
已有列表list元素如下:
list=['jesse','786', '2.23', 'john', '70.2']
现在要将1位置的‘786’元素删除

方法一:(用remove函数根据元素值删除)

格式:
列表名.remove(‘要删除的列表值’)
//代码
list=['jesse','786', '2.23', 'john', '70.2']
list.remove('786')
print(list)
//执行结果
['jesse', '2.23', 'john', '70.2']

方法二:(根据元素位置删除)

#使用del

格式:
del 列表名[要删元素所在位置]

//代码(‘786’元素所在位置为1)
list=['jesse','786', '2.23', 'john', '70.2']
del list[1]
print(list)
//执行结果
['jesse', '2.23', 'john', '70.2']

#用pop方法

pop()方法用于移除列表中的一个元素(默认最后一个元素也就是-1位置)
格式:
list.pop(要删除的列表元素位置)

//代码
list=['jesse','786', '2.23', 'john', '70.2']
list.pop(1)
print(list)
//执行结果
['jesse', '2.23', 'john', '70.2']

修改/更新列表中的元素

例如:
已有列表list元素如下:
list=['jesse','786', '2.23', 'john', '70.2']
现在要将1位置的‘786’元素修改为zhangsan这个元素
格式:
列表名[要修改的位置]=’要修改的值’

//代码
list=['jesse','786', '2.23', 'john', '70.2']
list[1]='zhangsan'
print(list)
//执行结果
['jesse', 'zhangsan', '2.23', 'john', '70.2']

访问/查询列表中的值

# 无论是取值操作还是赋值操作索引不存在则报错

//代码
list = ['jesse', 786, 2.23, 'john', 70.2]
tinylist = [123, 'john']
print(list)                        # 输出完整列表
print(list[0])                    # 输出列表的第一个元素
print(list[-1])                    # 输出列表的最后一个元素
print(list[1:3])    # 输出第二个至第三个的元素(虽然写的是[1:3];但是顾头不顾尾,只能从第2个取到第3个,第4个最后一位取不到;只能取到其前一位)
print(list[2:])                    # 输出从第三个开始至列表末尾的所有元素
print(list[:3])                    #输出从第一个开始至第三个元素(原因顾首不顾尾)
print(list[-4:-1])                #输出从倒数第四个到倒数第二个(因为顾头不顾尾所以只取到倒数第二个而不是倒数第一个)
print(list[-2:])                    输出从倒数第二个至列表末尾的所有元素
print(tinylist*2)                # 输出列表两次
print(list+tinylist)                # 打印组合的列表         
print(len(list))                 #打印列表长度
以上实例输出结果:
['jesse', 786, 2.23, 'jhon', 70.2]
Jesse
70.2
[786, 2.23]
[2.23, 'john', 70.2]
['jesse', 786, 2.23]
[786, 2.23, 'john']
['john', 70.2]
[123, 'jhon', 123, 'jhon']
['jesse', 786, 2.23, 'jhon', 70.2, 123, 'jhon']
5

切片操作

list = ['jesse', 786, 2.23, 'john', 70.2]  #从0开始数依次元素为list[0]=jesse、list[1]=786、list[2]=2.23、list[3]=john、list[4]=70.2
print(list[1:3])    # 输出第二个至第三个的元素(虽然写的是[1:3];但是顾头不顾尾,只能从第2个取到第3个,第4个最后一位取不到;只能取到其前一位)
print(list[0])                    # 输出列表的第一个元素
print(list[-1])                    # 输出列表的最后一个元素

步长切片

list = ['jesse', 786, 2.23, 'john', 70.2]
print(list[0:-1:2])               #输出从第一个到倒数第二个并且步长为2;跳着切(因为顾头不顾尾所以只取到倒数第二个而不是倒数第一个)
# //0和-1可以省略
print(list[::2])                    #['jesse', 2.23, 70.2]
print(list[-1::-1])                #[70.2, 'john', 2.23, 786, 'jesse']

# //print结果
['jesse', 2.23]
['jesse', 2.23, 70.2]
[70.2, 'john', 2.23, 786, 'jesse']

根据元素查出元素在列表所在位置(用index方法)

index()函数用于从列表中找出某个值第一个匹配项的索引位置。

已有列表list元素如下:
list=['jesse','786', '2.23', 'john', '70.2']
假如现在已经知道列表中有john这个元素,查出其在表中所在位置
//代码
list=['jesse','786', '2.23', 'john', '70.2']
print(list.index('786'))
//执行结果
3

统计列表中相同元素的个数(count函数)

count() 方法用于统计某个元素在列表中出现的次数。
count()方法语法:
list.count(列表中需要统计的对象)

已有列表list元素如下:
list=['jesse','zhangsan','zhangsan','786', '2.23', 'john', '70.2']
//统计其中zhangsan这个元素重复的有几个

//代码
list=['jesse','zhangsan','zhangsan','786', '2.23', 'john', '70.2']
print(list.count('zhangsan'))
//运行结果
2

Python列表脚本操作符

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
如下所示:

 Python列表截取与拼接

Python的列表截取与字符串操作类型,如下所示:
L=['Google', 'Runoob', 'Taobao']
操作:

>>>L=['Google', 'Runoob', 'Taobao']
>>> L[2]
'Taobao'
>>> L[-2]
'Runoob'
>>> L[1:]
['Runoob', 'Taobao']
>>>
列表还支持拼接操作:
>>>squares = [1, 4, 9, 16, 25]
>>> squares += [36, 49, 64, 81, 100]
>>> squares
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>>

 嵌套列表

使用嵌套列表即在列表里创建其它列表,例如:
>>>a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'

解压赋值(字典也可以用):(只能取开头和结尾)

//代码
salaries=[33,22,11,55,44]
a,b,c,*abc=salaries   #取前三个值
print(a,b,c,abc)
//执行结果
33 22 11 [55, 44]

//代码
salaries=[33,22,11,55,44]
*_,a,b,c=salaries  #取后三个值
print(a,b,c)
//执行结果
11 55 44

//代码
salaries=[33,22,11,55,44]
a,b,c,*_,m=salaries  #取前三个值和最后一个值
print(a,b,c,m)
//执行结果
33 22 11 44

列表生成式:(使代码更简洁)

//列表生成式
a=[ i*2 for i in range(10)]
print(a)
执行结果
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

//相当于
//代码
a=[]
for i in range(10):
    a.append(i*2)
print(a)

Python列表函数&方法

1、len(list)函数:列表元素个数

//描述
len() 方法返回列表元素个数。
//语法
len()方法语法:
len(list)
//参数
list -- 要计算元素个数的列表。
//返回值
返回列表元素个数。
//实例
以下实例展示了 len()函数的使用方法:
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 'Taobao']
print (len(list1))
list2=list(range(5)) # 创建一个 0-4 的列表
print (len(list2))
以上实例输出结果如下:
3
5
也可以用list下的len方法:
代码:
print(list1.__len__())
输出结果:
3
View Code

2、max(list):返回列表元素最大值

//描述
max() 方法返回列表元素中的最大值。

//语法
max()方法语法:
max(list)
//参数
list -- 要返回最大值的列表。
返回值
返回列表元素中的最大值。
//实例

以下实例展示了 max()函数的使用方法:
#!/usr/bin/python3
list1, list2 = ['Google', 'Runoob', 'Taobao'], [456, 700, 200]
print ("list1 最大元素值 : ", max(list1))
print ("list2 最大元素值 : ", max(list2))
以上实例输出结果如下:
list1 最大元素值 :  Taobao 
list2 最大元素值 :  700

当列表中的个元素都是字符串的时候,max 函数的比较原理:
//代码
list1 = ['','','python']
list2 = [100, 200, 300]
print( 'list1的最大值:', max(list1) )
print( 'list2的最大值:', max(list2) )

print( id(list1[0]) )
print( id(list1[1]) )
print( id(list1[2]) )

print('' > '')
print('' > 'python')
print('' > 'python')
输出结果为:
list1的最大值: 爱
list2的最大值: 300

95966224
100598176
95751008

False
True
True
可以看出列表中元素为字符串的时候,max 函数的比较是根据 id 的大小来判断的。
方法详解

3、min(list):返回列表元素最小值

//描述
min() 方法返回列表元素中的最小值。
//语法
min()方法语法:
min(list)
//参数
list -- 要返回最小值的列表。
返回值
返回列表元素中的最小值。
//实例
以下实例展示了 min()函数的使用方法:
#!/usr/bin/python3
list1, list2 = ['Google', 'Runoob', 'Taobao'], [456, 700, 200]
print ("list1 最小元素值 : ", min(list1))
print ("list2 最小元素值 : ", min(list2))
以上实例输出结果如下:
list1 最小元素值 :  Google
list2 最小元素值 :  200

和max(list)函数一样比较是根据 id 的大小来判断
View Code

4、list(seq):类型转换

//描述
list() 方法用于将元组或字符串转换为列表。
注:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。
//语法
list()方法语法:
list( seq )
//参数
list -- 要转换为列表的元组或字符串。
返回值
返回列表。
//实例
以下实例展示了 list()函数的使用方法:
#!/usr/bin/python3
aTuple = (123, 'Google', 'Runoob', 'Taobao')
list1 = list(aTuple)
print ("列表元素 : ", list1)

str="Hello World"
list2=list(str)
print ("列表元素 : ", list2)
list3=list(range(5))
print ("列表元素 : ", list3)

以上实例输出结果如下:
列表元素 :  [123, 'Google', 'Runoob', 'Taobao']
列表元素 :  ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
列表元素 :  [0, 1, 2, 3, 4]
View Code

Python包含以下方法:

list.append(obj) 在列表末尾添加新的对象

//描述
append() 方法用于在列表末尾添加新的对象。
//语法
append()方法语法:
list.append(obj)
//参数
obj -- 添加到列表末尾的对象。
//返回值
该方法无返回值,但是会修改原来的列表。
//实例
以下实例展示了 append()函数的使用方法:
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
print ("更新后的列表 : ", list1)
以上实例输出结果如下:
更新后的列表 :  ['Google', 'Runoob', 'Taobao', 'Baidu']
View Code

list.count(obj) 统计某个元素在列表中出现的次数

//描述
count() 方法用于统计某个元素在列表中出现的次数。
//语法
count()方法语法:
list.count(obj)
//参数
obj -- 列表中统计的对象。
返回值
返回元素在列表中出现的次数。
//实例
以下实例展示了 count()函数的使用方法:
#!/usr/bin/python3
aList = [123, 'Google', 'Runoob', 'Taobao', 123]
print ("123 元素个数 : ", aList.count(123))
print ("Runoob 元素个数 : ", aList.count('Runoob'))
//以上实例输出结果如下:
123 元素个数 :  2
Runoob 元素个数 :  1
View Code

list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

//描述
extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
//语法
extend()方法语法:
list.extend(seq)
//参数
seq -- 元素列表。
返回值
该方法没有返回值,但会在已存在的列表中添加新的列表内容。
//实例
以下实例展示了 extend()函数的使用方法:
#!/usr/bin/python3

list1 = ['Google', 'Runoob', 'Taobao']
list2=list(range(5)) # 创建 0-4 的列表
list1.extend(list2)  # 扩展列表
print ("扩展后的列表:", list1)
//以上实例输出结果如下:
扩展后的列表: ['Google', 'Runoob', 'Taobao', 0, 1, 2, 3, 4]
extend 与 append 的区别
>>> A = ['q', 'w', 'e', 'r']
>>> A.extend(['t', 'y'])
>>> A
['q', 'w', 'e', 'r', 't', 'y']
>>>len(A)

>>> B = ['q', 'w', 'e', 'r']
>>> B.append(['t', 'y'])
>>> B
['q', 'w', 'e', 'r', ['t', 'y']]
>>>len(B)
extend 与 append 方法的相似之处在于都是将新接收到参数放置到已有列表的后面。而 extend 方法只能接收 list,且把这个 list 中的每个元素添加到原 list 中。
而 append 方法可以接收任意数据类型的参数,并且简单地追加到 list 尾部。
>>> a = [11,22,33]
>>> a.extend([44])
>>> a
[11,22,33,44]
>>> a.extend('55')
>>> a
[11,22,33,44,'5','5']    #因为extend只接收list,所以将其拆分
View Code

list.index(obj) 从列表中找出某个值第一个匹配项的索引位置

//描述
index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
//语法
index()方法语法:
list.index(obj)
//参数
obj -- 查找的对象。
返回值
该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。
//实例
以下实例展示了 index()函数的使用方法:
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 'Taobao']
print ('Runoob 索引值为', list1.index('Runoob'))
print ('Taobao 索引值为', list1.index('Taobao'))
//以上实例输出结果如下:
Runoob 索引值为 1
Taobao 索引值为 2
View Code

list.insert(index, obj) 将对象插入列表

//描述
insert() 函数用于将指定对象插入列表的指定位置。

//语法
insert()方法语法:

list.insert(index, obj)
//参数
index -- 对象obj需要插入的索引位置。
obj -- 要插入列表中的对象。
//返回值
该方法没有返回值,但会在列表指定位置插入对象。
//实例
以下实例展示了 insert()函数的使用方法:
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 'Taobao']
list1.insert(1, 'Baidu')
print ('列表插入元素后为 : ', list1)
以上实例输出结果如下:
列表插入元素后为 :  ['Google', 'Baidu', 'Runoob', 'Taobao']
View Code

list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

//描述
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
//语法
pop()方法语法:
list.pop([index=-1])
//参数
index -- 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。
//返回值
该方法返回从列表中移除的元素对象。
//实例
以下实例展示了 pop()函数的使用方法:
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 'Taobao']
list1.pop()
print ("列表现在为 : ", list1)
list1.pop(1)
print ("列表现在为 : ", list1)
以上实例输出结果如下:
列表现在为 :  ['Google', 'Runoob']
列表现在为 :  ['Google']
View Code

list.remove(obj) 移除列表中某个值的第一个匹配项

//描述
remove() 函数用于移除列表中某个值的第一个匹配项。
//语法
remove()方法语法:
list.remove(obj)
//参数
obj -- 列表中要移除的对象。
//返回值
该方法没有返回值但是会移除两种中的某个值的第一个匹配项。
//实例
以下实例展示了 remove()函数的使用方法:
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
list1.remove('Taobao')
print ("列表现在为 : ", list1)
list1.remove('Baidu')
print ("列表现在为 : ", list1)
以上实例输出结果如下:
列表现在为 :  ['Google', 'Runoob', 'Baidu']
列表现在为 :  ['Google', 'Runoob']
View Code

list.reverse() 反转列表中元素

//描述
reverse() 函数用于反向列表中元素。
//语法
reverse()方法语法:
list.reverse()
//参数
NALL。
//返回值
该方法没有返回值,但是会对列表的元素进行反向排序。
//实例
以下实例展示了 reverse()函数的使用方法:
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
list1.reverse()
print ("列表反转后: ", list1)
以上实例输出结果如下:

列表反转后:  ['Baidu', 'Taobao', 'Runoob', 'Google']
View Code

list.sort(cmp=None, key=None, reverse=False) 对原列表进行排序

列表中sort方法
描述
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。

语法
sort()方法语法:

list.sort(*, key=None, reverse=Fales),取消了python2中的关键字参数cmp
参数
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
返回值
该方法没有返回值,但是会对列表的对象进行排序。

实例
以下实例展示了 sort() 函数的使用方法:
实例
#!/usr/bin/python
aList = ['Google', 'Runoob', 'Taobao', 'Facebook'] 
aList.sort()
print ( "List : ", aList)
以上实例输出结果如下:
List :  ['Facebook', 'Google', 'Runoob', 'Taobao']
以下实例降序输出列表:(默认升序)
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*- 
# 列表
vowels = ['e', 'a', 'u', 'o', 'i']
# 降序
vowels.sort(reverse=True)
# 输出结果
print ( '降序输出:', vowels )
以上实例输出结果如下:
降序输出: ['u', 'o', 'i', 'e', 'a']
以下实例演示了通过指定列表中的元素排序来输出列表:

实例
#!/usr/bin/python
# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二个元素排序
random.sort(key=takeSecond)
# 输出类别
print ('排序列表:', random)
以上实例输出结果如下:
排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]
View Code

list.clear() 清空列表

//描述
clear() 函数用于清空列表,类似于 del a[:]。
//语法
clear()方法语法:
list.clear()
//参数
无。
//返回值
该方法没有返回值。
//实例
以下实例展示了 clear()函数的使用方法:
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
list1.clear()
print ("列表清空后 : ", list1)
以上实例输出结果如下:
列表清空后 :  []
View Code

list.copy() 复制列表

/描述
copy() 函数用于复制列表,类似于 a[:]。
//语法
copy()方法语法:
list.copy()
//参数
无。
//返回值
返回复制后的新列表。
//实例
以下实例展示了 copy()函数的使用方法:
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
list2 = list1.copy()
print ("list2 列表: ", list2)
以上实例输出结果如下:
list2 列表:  ['Google', 'Runoob', 'Taobao', 'Baidu']


//注意:copy()这个方法浅复制的时候,如果列表里面套列表,只复制第一层列表;浅copy列表list中嵌套的列表时,只是拷贝了一份列表的内存地址
//代码
list=['jesse','zhangsan',['786', '2.23']]
list1=list.copy()
print(list)
print(list1)
list[0]='jc'
list[2][0]='yuanyuan'       #我改list,按理说list1是没修改的,结果也改了
print(list)
print(list1)
//执行结果
['jesse', 'zhangsan', ['786', '2.23']]
['jesse', 'zhangsan', ['786', '2.23']]
['jc', 'zhangsan', ['yuanyuan', '2.23']]
['jesse', 'zhangsan', ['yuanyuan', '2.23']]

//如果想真正的深入copy一下用copy.deepcopy(list)
//代码
import copy
list=['jesse','zhangsan',['786', '2.23']]
list1=copy.deepcopy(list)
print(list)
print(list1)
list[0]='jc'
list[2][0]='yuanyuan'
print(list)
print(list1)
//执行结果
['jesse', 'zhangsan', ['786', '2.23']]
['jesse', 'zhangsan', ['786', '2.23']]
['jc', 'zhangsan', ['yuanyuan', '2.23']]
['jesse', 'zhangsan', ['786', '2.23']]
View Code

使用for循环遍历列表中的元素

//代码
list = ['jesse', 786, 2.23, 'john', 70.2]
for i in range(len(list)):
print("list列表中第%s个元素为:" % i,list[i])
//执行结果
list列表中第0个元素为: jesse
list列表中第1个元素为: 786
list列表中第2个元素为: 2.23
list列表中第3个元素为: john
list列表中第4个元素为: 70.2
View Code

补充:链

from itertools import chain


def f1(x):
    return x + 1


func1_list = [f1, lambda x: x + 10]


def f2(x):
    return x - 1


new_func_list = chain([f2], func1_list)

for func in new_func_list:
    print(func)

"""
<function f2 at 0x10a724310>
<function f1 at 0x10a561430>
<function <lambda> at 0x10a6c1670>
"""

 

posted @ 2020-02-25 19:52  耗油炒白菜  阅读(444)  评论(0编辑  收藏  举报