前言
本文主要给大家介绍了关于Python3列表方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
1 使用[]或者list()创建列表
1
2
|
user = [] user = list () |
2 使用list() 可以将其他类型转换成列表
1
2
3
4
5
6
7
|
# 将字符串转成列表 >>> list ( 'abcde' ) [ 'a' , 'b' , 'c' , 'd' , 'e' ] # 将元祖转成列表 >>> list (( 'a' , 'b' , 'c' )) [ 'a' , 'b' , 'c' ] |
3 使用[offset]获取元素 或 修改元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
>>> users = [ 'a' , 'b' , 'c' , 'd' , 'e' ] # 可以使用整数来获取某个元素 >>> users[ 0 ] 'a' # 可以使用负整数来表示从尾部获取某个元素 >>> users[ - 1 ] 'e' # 数组越界会报错 >>> users[ 100 ] Traceback (most recent call last): File "<stdin>" , line 1 , in <module> IndexError: list index out of range >>> users[ - 100 ] Traceback (most recent call last): File "<stdin>" , line 1 , in <module> IndexError: list index out of range # 修改某个元素 >>> users[ 0 ] = 'wdd' >>> users [ 'wdd' , 'b' , 'c' , 'd' , 'e' ] >>> |
4 列表切片与提取元素
列表的切片或者提取之后仍然是一个列表
形式如:list[start:end:step]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
>>> users [ 'wdd' , 'b' , 'c' , 'd' , 'e' ] # 正常截取 注意这里并不会截取到users[2] >>> users[ 0 : 2 ] [ 'wdd' , 'b' ] # 也可从尾部截取 >>> users[ 0 : - 2 ] [ 'wdd' , 'b' , 'c' ] # 这样可以获取所有的元素 >>> users[:] [ 'wdd' , 'b' , 'c' , 'd' , 'e' ] # 也可以加上步长参数 >>> users[ 0 : 4 : 2 ] [ 'wdd' , 'c' ] # 也可以通过这种方式去将列表取反 >>> users[:: - 1 ] [ 'e' , 'd' , 'c' , 'b' , 'wdd' ] # 注意切片时,偏移量可以越界,越界之后不会报错,仍然按照界限来处理 例如开始偏移量如果小于0,那么仍然会按照0去计算。 >>> users [ 'wdd' , 'b' , 'c' , 'd' , 'e' ] >>> users[ - 100 : 3 ] [ 'wdd' , 'b' , 'c' ] >>> users[ - 100 : 100 ] [ 'wdd' , 'b' , 'c' , 'd' , 'e' ] >>> |
5 使用append()添加元素至尾部
形式如:list.append(item)
1
2
3
4
5
|
>>> users [ 'wdd' , 'b' , 'c' , 'd' , 'e' ] >>> users.append( 'ddw' ) >>> users [ 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' ] |
6 使用extend()或+=合并列表
形式如:list1.extend(list2)
这两个方法都会直接修改原列表
1
2
3
4
5
6
7
8
9
10
|
>>> users [ 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' ] >>> names [ 'heihei' , 'haha' ] >>> users.extend(names) >>> users [ 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' ] >>> users + = names >>> users [ 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , 'haha' ] |
7 使用insert()在指定位置插入元素
形式如:list.insert(offset, item)
insert也不存在越界的问题,偏移量正负都行,越界之后会自动伸缩到界限之内,并不会报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
>>> users [ 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , 'haha' ] >>> users.insert( 0 , 'xiaoxiao' ) >>> users [ 'xiaoxiao' , 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , 'haha' ] >>> users.insert( - 1 , '-xiaoxiao' ) >>> users [ 'xiaoxiao' , 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , '-xiaoxiao' , 'haha' ] # 下面-100肯定越界了 >>> users.insert( - 100 , '-xiaoxiao' ) >>> users [ '-xiaoxiao' , 'xiaoxiao' , 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , '-xiaoxiao' , 'haha' ] # 下面100也是越界了 >>> users.insert( 100 , '-xiaoxiao' ) >>> users [ '-xiaoxiao' , 'xiaoxiao' , 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , '-xiaoxiao' , 'haha' , '-xiaoxiao' ] |
8 使用del删除某个元素
形式如:del list[offset]
del是python的语句,而不是列表的方法,del删除不存在的元素时,也会提示越界
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> users [ '-xiaoxiao' , 'xiaoxiao' , 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , '-xiaoxiao' , 'haha' , '-xiaoxiao' ] >>> del users[ 0 ] >>> users [ 'xiaoxiao' , 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , '-xiaoxiao' , 'haha' , '-xiaoxiao' ] >>> del users[ 100 ] Traceback (most recent call last): File "<stdin>" , line 1 , in <module> IndexError: list assignment index out of range >>> del users[ - 100 ] Traceback (most recent call last): File "<stdin>" , line 1 , in <module> IndexError: list assignment index out of range |
9 使用remove删除具有指定值的元素
形式如:list.remove(value)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
>>> users [ 'xiaoxiao' , 'wdd' , 'b' , 'c' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , '-xiaoxiao' , 'haha' , '-xiaoxiao' ] # 删除指定值'c' >>> users.remove( 'c' ) >>> users [ 'xiaoxiao' , 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'haha' , 'heihei' , '-xiaoxiao' , 'haha' , '-xiaoxiao' ] # 删除不存在的值会报错 >>> users.remove( 'alsdkfjalsdf' ) Traceback (most recent call last): File "<stdin>" , line 1 , in <module> ValueError: list .remove(x): x not in list # 如果该值存在多个,那么只能删除到第一个 >>> users.remove( 'haha' ) >>> users [ 'xiaoxiao' , 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'heihei' , '-xiaoxiao' , 'haha' , '-xiaoxiao' ] |
10 使用pop()方式返回某个元素后,并在数组里删除它
形式如:list.pop(offset=-1)
偏移量默认等于-1,也就是删除最后的元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
>>> users [ 'xiaoxiao' , 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'heihei' , '-xiaoxiao' , 'haha' , '-xiaoxiao' ] # 删除最后的元素 >>> users.pop() '-xiaoxiao' >>> users [ 'xiaoxiao' , 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'heihei' , '-xiaoxiao' , 'haha' ] # 如果列表本身就是空的,那么pop时会报错 >>> user.pop( 0 ) Traceback (most recent call last): File "<stdin>" , line 1 , in <module> IndexError: pop from empty list >>> users.pop( 0 ) 'xiaoxiao' >>> users [ 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'heihei' , '-xiaoxiao' , 'haha' ] # 越界时也会报错 >>> users.pop( 100 ) Traceback (most recent call last): File "<stdin>" , line 1 , in <module> IndexError: pop index out of range |
11 使用index()查询具有特定值的元素位置
形式如:list.index(value)
1
2
3
4
5
6
7
8
9
10
11
|
# index只会返回第一遇到该值得位置 >>> users [ 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'heihei' , '-xiaoxiao' , 'haha' ] >>> users.index( 'heihei' ) 5 # 如果该值不存在,也会报错 >>> users.index( 'laksdf' ) Traceback (most recent call last): File "<stdin>" , line 1 , in <module> ValueError: 'laksdf' is not in list |
12 使用in判断值是否存在列表
形式如:value in list
1
2
3
4
|
>>> users [ 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'heihei' , '-xiaoxiao' , 'haha' ] >>> 'wdd' in users True |
13 使用count()记录特定值出现的次数
形式如:list.count(value)
1
2
3
4
5
6
|
>>> users [ 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'heihei' , '-xiaoxiao' , 'haha' ] >>> users.count( 'heihei' ) 2 >>> users.count( 'h' ) 0 |
14 使用join()将列表转为字符串
形式如:string.join(list)
1
2
3
4
5
6
7
8
|
>>> users [ 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'heihei' , '-xiaoxiao' , 'haha' ] >>> ',' .join(users) 'wdd,b,d,e,ddw,heihei,heihei,-xiaoxiao,haha' >>> user [] >>> ',' .join(user) '' |
15 使用sort()重新排列列表元素
形式如:list.sort()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
>>> users [ 'wdd' , 'b' , 'd' , 'e' , 'ddw' , 'heihei' , 'heihei' , '-xiaoxiao' , 'haha' ] # 默认是升序排序 >>> users.sort() >>> users [ '-xiaoxiao' , 'b' , 'd' , 'ddw' , 'e' , 'haha' , 'heihei' , 'heihei' , 'wdd' ] # 加入reverse=True, 可以降序排序 >>> users.sort(reverse = True ) >>> users [ 'wdd' , 'heihei' , 'heihei' , 'haha' , 'e' , 'ddw' , 'd' , 'b' , '-xiaoxiao' ] # 通过匿名函数,传入函数进行自定义排序 >>> students [{ 'name' : 'wdd' , 'age' : 343 }, { 'name' : 'ddw' , 'age' : 43 }, { 'name' : 'jik' , 'age' : 90 }] >>> students.sort(key = lambda item: item[ 'age' ]) >>> students [{ 'name' : 'ddw' , 'age' : 43 }, { 'name' : 'jik' , 'age' : 90 }, { 'name' : 'wdd' , 'age' : 343 }] >>> students.sort(key = lambda item: item[ 'age' ], reverse = True ) >>> students [{ 'name' : 'wdd' , 'age' : 343 }, { 'name' : 'jik' , 'age' : 90 }, { 'name' : 'ddw' , 'age' : 43 }] >>> |
16 使用reverse()将列表翻转
形式如:list.reverse()
1
2
3
4
5
|
>>> users [ 'wdd' , 'heihei' , 'heihei' , 'haha' , 'e' , 'ddw' , 'd' , 'b' , '-xiaoxiao' ] >>> users.reverse() >>> users [ '-xiaoxiao' , 'b' , 'd' , 'ddw' , 'e' , 'haha' , 'heihei' , 'heihei' , 'wdd' ] |
17 使用copy()复制列表
形式如:list2 = list1.copy()
list2 = list1
这种并不是列表的复制,只是给列表起了别名。实际上还是指向同一个值。
1
2
3
4
5
6
|
>>> users [ '-xiaoxiao' , 'b' , 'd' , 'ddw' , 'e' , 'haha' , 'heihei' , 'heihei' , 'wdd' ] >>> users2 = users.copy() >>> users2 [ '-xiaoxiao' , 'b' , 'd' , 'ddw' , 'e' , 'haha' , 'heihei' , 'heihei' , 'wdd' ] >>> |
18 使用clear()清空列表
形式如: list.clear()
1
2
3
4
5
|
>>> users2 [ '-xiaoxiao' , 'b' , 'd' , 'ddw' , 'e' , 'haha' , 'heihei' , 'heihei' , 'wdd' ] >>> users2.clear() >>> users2 [] |
19 使用len()获取列表长度
形式如:len(list)
1
2
3
4
|
>>> users [ '-xiaoxiao' , 'b' , 'd' , 'ddw' , 'e' , 'haha' , 'heihei' , 'heihei' , 'wdd' ] >>> len (users) 9 |
20 关于列表越界的深入思考
写了这些方法后,我有一些疑问,为什么有些操作会提示越界,有些则不会呢?
会提示偏移量越界的操作有
-
list[offset]
读取或者修改某个元素 -
del list[offset]
删除指定位置的元素 -
list.remove(value)
删除指定值的元素 -
list.pop(offset)
删除指定位置的元素
如果偏移量越界,这些方法会报错的。我的个人理解是:
假如我想读取偏移量为10的元素,但是该元素并不存在,如果系统自动给你读取了列表的最后一个元素,而且不报错,这是无法容忍的bug。 如果我想删除第10个元素,但是第10个元素并不存在,而系统帮你删除了列表的最后一个元素,我觉得这也是无法容忍的。
所以在使用这些方法时,务必确认该偏移量的元素是否存,否则可能会报错。
总结
以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:https://segmentfault.com/a/1190000011438238