python(一)列表与元组——列表

1:list函数
功能:根据字符串(也可以是所有类型的序列)创建列表。

>>> list('zhaoliying')
['z', 'h', 'a', 'o', 'l', 'i', 'y', 'i', 'n', 'g']

2:基本列表操作:元素赋值,元素删除,分片赋值
2.1:元素赋值(用索引标记为元素赋值)

>>> idol = ['zhaoliying','vs','wuenda']
>>> idol[1] = '?'
>>> idol
['zhaoliying', '?', 'wuenda']

2.2:删除元素(del)

>>> idol = ['zhaoliying','keer','wuenda','myhuba','shagua']
>>> del idol[4]
>>> idol
['zhaoliying', 'keer', 'wuenda', 'myhuba']

2.3:分片赋值
这个就厉害了,不信你看

>>> idol = list('zhaoliying')
>>> idol[10:] = list('xihuanni')
>>> idol
['z', 'h', 'a', 'o', 'l', 'i', 'y', 'i', 'n', 'g', 'x', 'i', 'h', 'u', 'a', 'n', 'n', 'i']

即:使用分片赋值,可以使用与原序列不等长的序列将分片替换。

>>> hua =['I','YOU']
>>> hua[1:1] = ['LOVE']
>>> hua
['I', 'LOVE', 'YOU']
>>> shu = [2,8]
>>> shu[1:1] = [4,6,7]
>>> shu
[2, 4, 6, 7, 8]

即:分片赋值语句可以在不需要替换任何原有元素的情况下插入新的元素

>>> shu = [2,4,6,7,8]
>>> shu[:4] = []
>>> shu
[8]

即:分片赋值也可以删除元素
3:列表方法
方法调用格式:对象.方法 (参数) 类似于函数调用
3.1:append 功能:在列表末尾追加新的对象

>>> shu = [2,4,6,7,8]
>>> shu.append('shuyazi')
>>> shu
[2, 4, 6, 7, 8, 'shuyazi']

3.2:count 功能:统计某个元素在列表中出现的次数

>>> wen =['you','know','that','I','know','you','donnot','know','whther','he','know']
>>> wen.count('know')
4
>>> shu = [[1,1],[1,[1,1]],1,1,1,[1,1,1,[1,1]]]
>>> shu.count(1)
3
>>> shu.count([1,1])
1

3.3:extend 功能:用新列表扩展原有的列表

>>> idol = ['zhaoliying']
>>> biaobai = ['love you']
>>> idol.extend(biaobai)
>>> idol
['zhaoliying', 'love you']
>>> idol = ['zhaoliying']
>>> biaobai = ['love you']
>>> idol + biaobai
['zhaoliying', 'love you']
>>> idol
['zhaoliying']

注:效果上extend看起来很像连接操作,但是extend相当于修改了原始列表,而连接操作并没有修改原始列表。
3.4:index 功能:找出列表中某个值第一个匹配项的索引位置

>>> idol = ['mengmengda','liying','baozi','yingbao']
>>> idol.index('liying')
1

3.5:insert 功能:将对象插入到列表中

>>> shu = [2,4,6,7,8]
>>> shu.insert (5,'shuyazi')
>>> shu
[2, 4, 6, 7, 8, 'shuyazi']

3.6:pop 功能:移除列表中的一个元素(默认是最后一个),并且返回该元素的值。

>>> shu = [2,4,6,7,8]
>>> shu.pop()
8
>>> shu
[2, 4, 6, 7]
>>> key = [1,0,7,6]
>>> key.pop(1)
0
>>> key
[1, 7, 6]

注:Python中的列表pop方法即出栈,Python没有入栈方法,但可以使用append方法来代替。pop和append方法的操作结果恰好相反,如果入栈(或者追加)刚刚出栈的值,最后得到的结果还是原来的栈。

>>> shu = [2,4,6,7,8]
>>> shu.append(shu.pop())
>>> shu
[2, 4, 6, 7, 8]

3.7:remove 功能:移除列表中某个值的第一个匹配项。

>>> wen = ['you','know','that','I','know','you','donnot','know']
>>> wen.remove('you')
>>> wen
['know', 'that', 'I', 'know', 'you', 'donnot', 'know']

3.8:reverse 功能:将列表中的元素反向存放。

>>> lover = ['an','you fool']
>>> lover.reverse()
>>> lover
['you fool', 'an']

3.9:sort 功能:在原位置对列表进行排序,根据python的默认排序规则按升序排列元素(改变原来的列表)

>>> anniversary = [2017,5,28,23.43,5,29,5.54]
>>> anniversary.sort()
>>> anniversary
[5, 5, 5.54, 23.43, 28, 29, 2017]

那么,怎样得到排好序的列表同时保留原有列表呢?
想法1:

>>> anniversary = [2017,5,28,23.43,5,29,5.54]
>>> y = anniversary.sort()
>>> print y
None

即:sort修改了原有的列表,但是返回了空值。想法1 :错误
想法2:

>>> anniversary = [2017,5,28,23.43,5,29,5.54]
>>> y = anniversary[:]
>>> y.sort()    
>>> anniversary
[2017, 5, 28, 23.43, 5, 29, 5.54]
>>> y
[5, 5, 5.54, 23.43, 28, 29, 2017]

即:把anniversary的副本赋值给y,然后对y排序。 想法2:正确
想法3:

>>> anniversary = [2017,5,28,23.43,5,29,5.54]
>>> y = anniversary
>>> y.sort()
>>> anniversary
[5, 5, 5.54, 23.43, 28, 29, 2017]
>>> y
[5, 5, 5.54, 23.43, 28, 29, 2017]

即:简单把anniversary赋值给y是没有用的,这样两个指向同一个列表。
y = anniversary[:] vs y = anniversary 想法3:错误
想法4:

>>> anniversary = [2017,5,28,23.43,5,29,5.54]
>>> y = sorted(anniversary)
>>> anniversary
[2017, 5, 28, 23.43, 5, 29, 5.54]
>>> y
[5, 5, 5.54, 23.43, 28, 29, 2017]

新技能get–>sorted函数,顾名思义,排序,这个函数适用于任何序列,却总是返回一个列表。

>>> sorted('lovehuba')
['a', 'b', 'e', 'h', 'l', 'o', 'u', 'v']

3.10:高级排序(按照特定方式排序)
敲黑板:compare(x,y)比较函数:x>y时返回正数,x

>>> cmp(25,23)
1
>>> cmp(23,25)
-1
>>> cmp(92,92)
0
>>> an = [5,28,5,29]
>>> an.sort()
>>> an = [5,28,5,29]
>>> an.sort(cmp)
>>> an
[5, 5, 28, 29]

sort另外两个可选参数–>key 和 reverse
参数key必须要提供一个在排序过程中使用的函数作为键函数。
参数reverse用来指明列表是否要进行反向排序。

>>> lover = ['huba','dabendan','shagua','andada']
>>> lover.sort(key=len)
>>> lover
['huba', 'shagua', 'andada', 'dabendan']
>>> lover = ['huba','dabendan','shagua','andada']
>>> lover.sort(reverse=True)
>>> lover
['shagua', 'huba', 'dabendan', 'andada']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值