码迷,mamicode.com
首页 > 其他好文 > 详细

1.9 list

时间:2018-01-07 00:45:18      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:range   err   cal   不同的   机制   数组   之一   改变   通用   

列表是什么?

list是Python中的基本数据结构之一,属于可变序列,所以前文中讲的可变序列的通用操作都适用于list。

这一节讲列表的特性吧。

 

特性一:

  列表是包含任意对象的有序集合,同一个列表中可以放不同的对象。

 1 >>> #生成一个列表,里边多放几种对象
 2 ... l = [3,你好,(7,8,9),[4,5],lambda x:x*x,{4:s}]
 3 >>> l
 4 [3, 你好, (7, 8, 9), [4, 5], <function <lambda> at 0x00000228B989D268>, {4: s}]
 5 >>>
 6 
 7 #目前l列表中已经存在多种数据类型,还可以向其中加入别的数据类型的数据,如向列表末尾加入range(3)
 8 
 9 >>> l.append(range(3))
10 >>> l
11 [3, 你好, (7, 8, 9), [4, 5], <function <lambda> at 0x00000228B989D268>, {4: s}, range(0, 3)]
12 >>>
13 
14 # l中能能放的数据类型还有其他种类

 

特性二:

  可以通过位置偏移,下标索引的方式方位列表中的元素。下标是从0开始的,倒过来是从-1开始的,这也是索引访问的一个特性。也可以访问某一范围之内的数值(切片)。 

 

 1 >>> #通过下标索引方式访问列表中的元素
 2 >>> l = list(range(5))
 3 >>> l[2]
 4 2
 5 >>> 
 6 >>> #通过下标倒着取元素
 7 >>> l[-1]
 8 4
 9 >>> l
10 [0, 1, 2, 3, 4]
11 >>> #可见,列表的索引倒着是从-1开始的,这点要注意
12 >>> 
13 >>> #用切片的方式访问列表中的元素
14 >>> l[2,4]
15 Traceback (most recent call last):
16   File "<pyshell#11>", line 1, in <module>
17     l[2,4]
18 TypeError: list indices must be integers or slices, not tuple
19 >>> l[2:3]
20 [2]
21 >>> l[1:4]
22 [1, 2, 3]
23 >>> l[-1:-3]   #这个例子就说明了即使是倒着取元素,切片的范围也是左小右大
24 []
25 >>> l[-3:-1]
26 [2, 3]
27 >>> 

 

特性三:

  列表可变长度,异质并且可互相嵌套。

 1 >>> #列表的可变长度表现在可以改变列表元素的数据量,具体实现方法包括append()、insert()、remove()、extend()、pop()、* 等  这几个函数的用法在前文中已经介绍,不再赘述
 2 >>> #说说列表异质这个特性吧,说的就是列表中的数据类型可以是可以是任意的数据类型
 3 >>> #互相嵌套说的是啥呢,简单来说列表的元素可以是一个列表,举个栗子
 4 >>> l = list(1,[2,4])
 5 Traceback (most recent call last):
 6   File "<pyshell#22>", line 1, in <module>
 7     l = list(1,[2,4])
 8 TypeError: list() takes at most 1 argument (2 given)
 9 >>> 
10 >>> l=[1,2,[3,4,5]]
11 >>> l[2]
12 [3, 4, 5]
13 >>> #列表中的列表中的元素该怎么访问呢?
14 >>> #第一步:通过l[2]取到了[3,4,5]  没毛病吧
15 >>> #第二步:给你一个[3,4,5],如何取元素呢?还用索引呗用
16 >>> #把两步结合到一起 ,看看怎么取到元素4
17 >>> l[2][1]
18 4
19 >>> #用这个方法可以嵌套很多很多层,只有有必要

 

特性四:

  列表属于可变序列,列表元素可原位改变。

 

特性五:

  5 列表的存储机制叫对象引用数组,跟之前讲过的变量的存储方式有关。

事先声明,这个截图是我截取的别人的,非原创。为了更好的说明,不惜盗图了。

为什么列表是异质的呢?就是由下图的这套机制决定的,个人理解,列表中存储的是实际内存对象的引用。

也就是列表中存储引用,具体这引用指向什么类型的对象就没有限制了,所以带给大家最直观的感受就是列表中可以存放任意类型的对象。

技术分享图片

 

 

 列表特殊操作一:

  排序 sort()

 1 >>> #先来一个列表,然后把顺序打乱,然后再排序
 2 >>> import random
 3 >>> l = list(range(5))
 4 >>> random.sh
 5 Traceback (most recent call last):
 6 File "<pyshell#43>", line 1, in <module>
 7 random.sh
 8 AttributeError: module random has no attribute sh
 9 >>> 
10 >>> random.shuffle(l)
11 >>> l
12 [3, 4, 0, 2, 1]
13 >>> l.sort()
14 >>> l
15 [0, 1, 2, 3, 4]
16 >>> #可见,sort()默认是按照从左到右的升序排序的
17 >>> #如果我想把排序的结果按照从左到右的降序排序有两种实现方法
18 >>> #1
19 >>> l.reverse()
20 >>> ls
21 Traceback (most recent call last):
22 File "<pyshell#53>", line 1, in <module>
23 ls
24 NameError: name ls is not defined
25 >>> l
26 [4, 3, 2, 1, 0]
27 >>> #就是sort()、reverse()两个函数结合着用
28 >>> 
29 >>> #2
30 >>> random.shuffle(l)
31 >>> l
32 [1, 4, 3, 2, 0]
33 >>> l.sort(reverse=True)
34 >>> l
35 [4, 3, 2, 1, 0]
36 >>> #一步到位,排序加反转
37 
38 >>> 
39 >>> #想必刚才写sort(reverse=True)是已经到sort()的另外一个参数了,这个参数的作用是什么呢?
40 >>> #如果列表中存储的是元素的序列类型数据,想根据序列中的特定位置的元素进行排序
41 >>> l = [Mark,Tony,ndusigdn,vjisodfhgs]
42 >>> #如果我想将根据l中的所有元素的第二位进行排序并反转
43 >>> l.sort(key=lambda x:x[1],reverse=Ture)
44 Traceback (most recent call last):
45 File "<pyshell#68>", line 1, in <module>
46 l.sort(key=lambda x:x[1],reverse=Ture)
47 NameError: name Ture is not defined
48 >>> l.sort(key=lambda x:x[1],reverse=True)
49 >>> l
50 [Tony, vjisodfhgs, ndusigdn, Mark]
51 >>>
52 
53 >>> #如果列表中的元素是列表,
54 
55 >>> l.sort(key=lambda x:x[1],reverse=True)
56 Traceback (most recent call last):
57 File "<pyshell#74>", line 1, in <module>
58 l.sort(key=lambda x:x[1],reverse=True)
59 File "<pyshell#74>", line 1, in <lambda>
60 l.sort(key=lambda x:x[1],reverse=True)
61 IndexError: list index out of range
62 >>> l
63 [[32464], [65472], [5468], [93525657], [87544346]]
64 >>> l.sort(key=lambda x:x[1])
65 Traceback (most recent call last):
66 File "<pyshell#76>", line 1, in <module>
67 l.sort(key=lambda x:x[1])
68 File "<pyshell#76>", line 1, in <lambda>
69 l.sort(key=lambda x:x[1])
70 IndexError: list index out of range
71 >>> 
72 >>> l = [[1,2,3,4,7],[43,657,43,256],[657,3,576,2454,67]]
73 >>> l.sort(key=lambda x:x[1],reverse=True)
74 >>> l
75 [[43, 657, 43, 256], [657, 3, 576, 2454, 67], [1, 2, 3, 4, 7]]
76 >>>

 

序列的排序还有一个方法,用全局函数排序 sorted(t),用法和l.sort()差不多。
这里需要注意一下两种排序方式对原序列的影响:
一:全局函数的方式并不改变原列表元素的顺序
1 >>> l = [Mark,Tony,ndusigdn,vjisodfhgs]
2 >>> l
3 [Mark, Tony, ndusigdn, vjisodfhgs]
4 >>> sorted(l,key=lambda x:x[1],reverse=True)   #全局函数sorted()直接就将排序结果返回了
5 [Tony, vjisodfhgs, ndusigdn, Mark]
6 >>> l
7 [Mark, Tony, ndusigdn, vjisodfhgs]              #原序列中的元素值并没有改变
8 >>> 
 
二:列表自带的函数会改变列表的元素的顺序
1 >>> l.sort(key=lambda x:x[1],reverse=True)      #列表的sort()函数返回的数据类型为None
2 >>> l
3 [Tony, vjisodfhgs, ndusigdn, Mark]             #原列表中值的元素顺序发生变化
4 >>>

 

1.9 list

标签:range   err   cal   不同的   机制   数组   之一   改变   通用   

原文地址:https://www.cnblogs.com/avention/p/8207091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!