列表方法

#方法是与对象有紧密联系的函数,对象可能是列表、数字,也可能是字符串或其他类型的对象。方法的调用方式前面有一个示例,调用语法如下:
    对象.方法(参数)
#由上面的语法和前面append()方法的示例可知:方法的定义方式是将对象放到方法名之前,两者之前用一个点号隔开,方法后面的括号中可以根据需要带上参数。除了语法上有一些不同,方法调用和函数调用很相似。
 
#列表中有count、index、sort等比较常用的方法,下面逐一进行介绍。
 
1、append
1 #该方法前面已经介绍过,功能是在列表的末尾添加新对象。
2 #使用方式为:
3 >>>list.append(obj)
2、count

 1 #count()方法用于统计某个元素在列表中出现的次数。
 2 #count()方法的语法如下:
 3 >>>list.count(obj)
 4 #此语法中list代表列表,obj代表列表中统计的对象。
 5 #示例如下
 6 >>> field=list('hello,world')
 7 >>> field
 8 ['h', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd']
 9 >>> print('列表field中,字母o的个数:',field.count('o'))
10 列表field中,字母o的个数: 2
11 >>> linxuyue=list('xiaotao')
12 >>> print('列表linxuyue中,字母o的个数为:',linxuyue.count('o'))
13 列表linxuyue中,字母o的个数为: 2
14 
15 >>> listobj=[26,'hello','world',26]
16 >>> listobj
17 [26, 'hello', 'world', 26]
18 >>> print('数字26的个数为:',listobj.count('26'))
19 数字26的个数为: 0
20 >>> print('数字26的个数为:',listobj.count(26))
21 数字26的个数为: 2
22 #此处需要注意的是数值型的不需要加单引号。
23 >>> print('hello的个数为:',listobj.count('hello'))
24 hello的个数为: 1
25 >>> listobj.count(26)
26 2
27 >>> min=[1,3],5,6,[1,3],2
28 >>> min
29 ([1, 3], 5, 6, [1, 3], 2)
30 >>> print('嵌套列表min中列表[1,3]的个数为:',min.count([1,3]))
31 嵌套列表min中列表[1,3]的个数为: 2
32 >>> print('嵌套列表min中5的个数为:',min.count(5))
33 嵌套列表min中5的个数为: 1
34 >>> print('嵌套列表min中1的个数为:',min.count(1))
35 嵌套列表min中1的个数为: 0
36 >>> min.count([1])
37 0
3、extend
 1 #extend()方法用于在列表末尾一次性追加另一个序列中的多个值(用新的列表扩展原来的列表。)
 2 extend()方法的语法如下:
 3 >>>list.extend(seq)
 4 #此语法中list代表列表,seq代表元素列表。
 5 >>> a=['hello','world']
 6 >>> b=['python','is','funny']
 7 >>> a.extend(b)
 8 >>> a
 9 ['hello', 'world', 'python', 'is', 'funny']
10 #以上操作结果看起来很像连接操作。extend()方法和序列相加有什么区别?
11 >>> a=['hello','world']
12 >>> b=['python','is','funny']
13 >>> a+b
14 ['hello', 'world', 'python', 'is', 'funny']
15 >>> a
16 ['hello', 'world']
17 #从输出的结果可以看出,两个示例中的a和b赋值都是一样的,但第一个示例中输出a的值和第二个示例中输出a的值是不一样的。
18 #由此我们得出,extend()方法和序列相加的主要区别是:extend()方法修改了被扩展的序列,如前面的a;原始连接操作会返回一个全新的列表,如上面的示例,返回的是一个包含a和b副本的新列表,而不会修改原始的变量。
19 #当然,也可以用前面学习的分片赋值实现相同的结果,如下:
20 >>> a=['hello','world']
21 >>> b=['python','is','funny']
22 >>> len(a:)
23 >>> a[len(a):]=b
24 >>> a
25 ['hello', 'world', 'python', 'is', 'funny']
26 #可以看到,输出结果和使用extend()方法一样,不过看起来没有exteng()方法易懂,因此不会选择这个方案。
4、index
 1 #index()方法用于从列表中找出某个值第一个匹配项的索引位置。
 2 #index()方法的语法如下:
 3 >>>list.index(obj)
 4 #此语法中list代表列表,obj代表查找的对象。
 5 #示例如下:
 6 >>> 袁威=['2017','','','','','']
 7 >>> print('工的索引位置为:',袁威.index(''))
 8 工的索引位置为: 3
 9 >>> 袁威.index(2017)
10 Traceback (most recent call last):
11   File "<pyshell#39>", line 1, in <module>
12     袁威.index(2017)
13 ValueError: 2017 is not in list
14 >>> 袁威.index('2017')
15 0
16 >>> 袁威.index('')
17 2
18 >>> 
19 由上面的示例看到,搜索文字‘工’,会发现它在索引号为3的位置;索引数字2017会提示2017不在列表中,加上引号才会正确索引出‘2017’的索引位置。
5、insert
 1 #insert()方法用于从列表中找出某个值第一个匹配项的索引位置。
 2 #insert()方法的语法如下:
 3 >>>list.insert(index,obj)
 4 #此语法中list()代表列表,index代表对象obj需要插入的索引位置,obj代表要插入列表中的对象。
 5 #示例如下:
 6 >>> numbers=[1,2,3]
 7 >>> print('插入之前的num:',numbers)
 8 插入之前的num: [1, 2, 3]
 9 >>> numbers.insert(2,'插入位置在2之后,3之前')
10 >>> print('插入之后的num:',numbers)
11 插入之后的num: [1, 2, '插入位置在2之后,3之前', 3]
12 >>> numbers
13 [1, 2, '插入位置在2之后,3之前', 3]
14 #由上面的示例看到,insert方法操作挺方便的。
15 #与extend()方法一样,insert()方法的操作也可以使用我们前面学习的分片赋值实现。
16 >>> numbers=[1,2,3]
17 >>> print('插入之前的numbers:',numbers)
18 插入之前的numbers: [1, 2, 3]
19 >>> print('插入之后的numbers:',numbers)
20 插入之后的numbers: [1, 2, '插入位置在2之后,3之前']
21 #输出结果和insert操作的结果一样,但看起了没有使用insert容易理解。
6、pop
 1 #pop()方法用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
 2 #pop()方法的语法如下:
 3 >>>list.pop(obj=list[-1])
 4 #此语法中list代表列表,obj为可选择的参数,代表要移除列表元素的对象。
 5 #示例如下:
 6 >>> 袁威=['2','0','1','7','','','','','']
 7 >>> 袁威.pop()       #不带参数,默认移除最后一个元素
 8 ''
 9 >>> print('移除元素后的袁威:',袁威)
10 移除元素后的袁威: ['2', '0', '1', '7', '', '', '', '']
11 >>> 袁威.pop(2)     #移除编号为2的元素
12 '1'
13 >>> print('移除元素编号为2的袁威:',袁威)
14 移除元素编号为2的袁威: ['2', '0', '7', '', '', '', '']
15 >>> 袁威.pop(0)
16 '2'
17 >>> print('移除元素编号为0后的袁威:',袁威)
18 移除元素编号为0后的袁威: ['0', '7', '', '', '', '']
19 #由示例可知,移除‘室’时未带参数,默认移除最后一个,‘1’和‘2’的移除是根据输入的编号参数进行的。
20 #pop方法是唯一一个既能修改列表又能返回元素值(除了None)的列表方法。
21 #使用pop方法可以实现一种常见的数据结构--栈。
22 #栈的原理就像堆放盘子一样,一次操作一个盘子,要将若干盘子堆成一堆,只能在一个盘子上面放另一个盘子;要拿盘子时,只能从顶部一个一个往下拿,最后放入的盘子是最先被拿的。栈也是这样,最后放入栈的最先被移除,称为LIFO(Last In First Out),即后进先出。
23 #栈中的放入和移除操作有统一的称谓--入栈(push)和出栈(pop)。Pyhton没有入栈方法,但可以使用append方法代替。pop方法和append方法的操作结果恰好相反,如果入栈(或追加)刚刚出栈的值,最后得到的结果就不会变,示例如下:
24 >>> numbers=[1,2,3]
25 >>> numbers.append(numbers.pop())   #追加默认出栈的值
26 >>> print('numbers追加默认出栈值的操作结果是:',numbers)
27 numbers追加默认出栈值的操作结果是: [1, 2, 3]
28 #由上面的操作结果看到,通过追加默认出栈的值得到的列表和原来是一样的。

7、remove

 1 #remove()方法用于移除列表中某个值的第一个匹配项。
 2  #remove()方法的语法如下:
 3 >>>list.remove(obj)
 4 #此语法中list中代表列表,obj为列表中要移除的对象。
 5 #示例如下:
 6 target=['2017','袁威','2017','铿锵','工作室','铿锵工作室','袁威']
 7 >>> print('移除前的列表target',target)
 8 移除前的列表target: ['2017', '袁威', '2017', '铿锵', '工作室', '铿锵工作室', '袁威']
 9 >>> target.remove(2017)
10 Traceback (most recent call last):
11   File "<pyshell#101>", line 1, in <module>
12     target.remove(2017)
13 ValueError: list.remove(x): x not in list
14 >>> target.remove('2017')
15 >>> print('移除后的列表target',target)
16 移除后的列表target ['袁威', '2017', '铿锵', '工作室', '铿锵工作室', '袁威']
17 >>> target.remove()
18 Traceback (most recent call last):
19   File "<pyshell#104>", line 1, in <module>
20     target.remove()
21 TypeError: remove() takes exactly one argument (0 given)
22 #由上面的输出结果看到,只有第一次出现的值被移除了,第二次出现的值没有被移除。并且remove()括号里必须得加上参数,否则会报错。同时,操作移除列表中不存在的值也是不行的,系统会告知移除对象不在列表中。
23 #需要了解的是,remove是一个没有返回值的原位置元素变更方法,它修改了列表却没有返回值,与pop方法正好相反。
24 >>> numbers=[1,2,3]
25 >>> print(numbers.remove(2))
26 None
8、reverse
 1 reverse()方法用于反向列表中的元素。
 2 >>> #reverse()方法的语法如下:
 3 >>> list.reverse()
 4 #此语法中list代表列表,该方法不需要传入参数。
 5 #示例如下:
 6 >>> target=['肖涛','林徐悦','陈安']
 7 >>> print('列表反转前target:',target)
 8 列表反转前target: ['肖涛', '林徐悦', '陈安']
 9 >>> target.reverse()
10 >>> print('列表反转后target:',target)
11 列表反转后target: ['陈安', '林徐悦', '肖涛']
12 #由上面的输出结果看到,该方法改变了列表但不返回值(和前面的remove一样)。
13 #如果需要对一个序列进行反向迭代,那么可以使用reversed函数,这个函数并不返回列表,而是返回一个迭代器(Iterator)对象,可以通过list函数把返回的对象转换为列表,例如:
14 >>> target=['肖涛', '林徐悦', '陈安']
15 >>> print('使用reversed函数反转结果:',list(reversed(target)))
16 使用reversed函数反转结果: ['陈安', '林徐悦', '肖涛']
17 #输出结果对原序列反向迭代了。
9、sort
 1 #sort()方法用于对原列表进行排序,如果指定参数,就使用参数指定的比较方法进行排序。
 2 #sort()方法的语法如下:
 3 >>> list.sort(func)
 4 #此语法中list代表列表,func为可选参数。如果指定参数,就会使用该参数的方法进行排序。
 5 #示例如下:
 6 >>> numbers=[6,3,4,7,8,3,7,465,83,]
 7 >>> numbers.sort()
 8 >>> print('numbers调用sort后:',numbers)
 9 numbers调用sort后: [3, 3, 4, 6, 7, 7, 8, 83, 465]
10 >>> numbers
11 [3, 3, 4, 6, 7, 7, 8, 83, 465]
12 #由上面输出的结果得知,sort方法改变了原来的列表,而不是简单的返回一个已排序的列表副本。
13 #我们前面学习过几个边改变列表却不返回值的方法(如append),不能将操作结果赋给一个变量,这样的行为方式很合常理,但当用户需要一个排好序的列表副本,同时又保留原有列表不变时,可以如下操作:
14 >>> numbers=[5,3,6,78,234,2,4]
15 >>> n=numbers.sort()
16 >>> print('变量n的结果是:',n)
17 变量n的结果是: None
18 >>> print('列表numbers排序后的结果是:',numbers)
19 列表numbers排序后的结果是: [2, 3, 4, 5, 6, 78, 234]
20 #输出结果和我们预期的不一样,因为sort方法修改了列表numbers,但是返回的是空值,所以我们最后得到的是已排序的numbers和值为None的n。该想法正确的实现方式是先把numbers的副本赋值给n,然后对n进行排序,操作如下:
21 >>> numbers=[5,3,6,78,234,2,4]
22 >>> n=numbers
23 >>> n.sort()
24 >>> print('变量n的结果是:',n)
25 变量n的结果是: [2, 3, 4, 5, 6, 78, 234]
26 >>> print('numbers的结果是:',numbers)
27 numbers的结果是: [2, 3, 4, 5, 6, 78, 234]            #numbers的也被排序了
28 >>> numbers=[5,3,6,78,234,2,4]
29 >>> n=numbers[:]              #将列表numbers切片后赋值给n
30 >>> n.sort()
31 >>> print('变量n的结果是:',n)
32 变量n的结果是: [2, 3, 4, 5, 6, 78, 234]
33 >>> print('numbers的结果是:',numbers)
34 numbers的结果是: [5, 3, 6, 78, 234, 2, 4]       #numbers保持原样
35 #执行结果和前面操作的一样。sorted函数可以用于任何序列,返回结果都是一个列表。示例如下:
36 >>> number=[23,53,1,6]
37 >>> number.sorted()
38 Traceback (most recent call last):
39   File "<pyshell#157>", line 1, in <module>
40     number.sorted()
41 AttributeError: 'list' object has no attribute 'sorted'
42 >>> sorted(number)
43 [1, 6, 23, 53]
44 >>> sorted('number')
45 ['b', 'e', 'm', 'n', 'r', 'u']
46 >>> target=['肖涛', '林徐悦', '袁威','陈安']
47 >>> sorted(target)
48 ['林徐悦', '肖涛', '袁威', '陈安']
49 >>> target.sort()
50 >>> print(target)
51 ['林徐悦', '肖涛', '袁威', '陈安']
52 >>> target
53 ['林徐悦', '肖涛', '袁威', '陈安']

10、clear

 1 #clear()方法用于清空列表,类似于 del a[:]
 2 #clear()语法如下:
 3 >>> list.clear()
 4 #此列表代表列表,不需要传入参数。
 5 #示例如下:
 6 >>> target=['陈安','林徐悦','肖涛']
 7 >>> target.clear()
 8 >>> print('taget调用clear方法后的结果为:',target)
 9 target调用clear方法后的结果为: []
10 #由操作结果看到,clear方法会清空整个列表,调用该方法进行清空很简单,但操作须谨慎。
11、copy
 1 #copy()方法用于复制列表,类似于a[:]。
 2 #copy()方法的语法如下:
 3 >>> list.copy()
 4 #此语法中list代表列表,不需要传入参数。
 5 #示例如下:
 6 >>> target=['陈安','林徐悦','肖涛']
 7 >>> target_1=target.copy()
 8 >>> print('复制操作结果:',target_1)
 9 复制操作结果: ['陈安', '林徐悦', '肖涛']
10 #由输出结果可知,copy()方法把整个target列表复制到了target_1.

 12、高级排序

 1 #如果希望元素能按特定方式进行排序(不是sort方法默认的按升序排列元素),就可以自定义比较方法。
 2 #sort方法有两个可选参数,即key何reverse。要使用他们,就要通过名字指定,我们称之为关键字参数。
 3 #示例如下:
 4 >>> target=['study','python','is','hayyp']
 5 >>> target.sort(key=len)                     #按字符串由短到长排序
 6 >>> target
 7 ['is', 'study', 'hayyp', 'python']
 8 >>> target.sort(key=len,reverse=True) #按字符串由长到短排序,传递两个参数
 9 >>> target
10 ['python', 'study', 'hayyp', 'is']
11 >>> numbers=[5,2,7,2,4]
12 >>> numbers.sort(reverse=True)        #排序后逆序(反转)
13 >>> numbers
14 [7, 5, 4, 2, 2]
15 #由上面的操作结果可知,sort方法带上参数后的操作是很灵活的,可以根号自己的需要使用该方法。(自定义函数)

end

 

posted @ 2017-10-18 11:05  爱你无目的  阅读(489)  评论(0编辑  收藏  举报