设为首页 收藏本站
查看: 481|回复: 0

[经验分享] python 列表与元组的操作简介

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-30 08:47:41 | 显示全部楼层 |阅读模式
  上一篇:Python 序列通用操作介绍

列表
  列表是可变的(mutable)——可以改变列表的内容,这不同于字符串和元组,字符串和元组都是不可变的。接下来讨论一下列表所提供的方法。

list函数
  可以使用list函数来创建列表:
list('Hello')  
['H', 'e', 'l', 'l', 'o']






列表的基本操作
  在Python 序列通用操作介绍中提及的操作全部适用于列表,例如索引、分片、连接、乘法等。而且由于列表是可以修改的,所以多了一些元素赋值、元素删除、分片赋值的方法。

改变列表元素的值
>>>  
>>> a=list('ooooo')
  
>>> a[2]='A'
  
>>> a
  
['o', 'o', 'A', 'o', 'o']
  
>>>

删除列表元素
  使用del对列表元素进行删除:
>>> a  
['o', 'o', 'A', 'o', 'o']
  
>>> del a[2]
  
>>> a
  
['o', 'o', 'o', 'o']
  
>>> len(a)
  
4
  删除之后,列表的长度也变成了4.关于del语句的使用后续介绍。

分片赋值
  使用分片赋值可以同时改变一个范围内的字符:
>>>  
>>> str1= list('abcdef')
  
>>> str1
  
['a', 'b', 'c', 'd', 'e', 'f']
  
>>> str1[3:]=list('abc')
  
>>> str1
  
['a', 'b', 'c', 'a', 'b', 'c']
  
>>>
  不止如此,分片赋值更强大的功能是使用长度不等的序列替换分片:
  
#长序列替换短分片
  
>>> str2=list('ppp')
  
>>> str2
  
['p', 'p', 'p']
  
>>> str2[1:]=('ython')
  
>>> str2
  
['p', 'y', 't', 'h', 'o', 'n']
  
>>>
>>>#短序列替换长分片   
>>> str2= list('abcdefg')
  
>>> str2
  
['a', 'b', 'c', 'd', 'e', 'f', 'g']
  
>>> str2[1:]= list('bc')
  
>>> str2
  
['a', 'b', 'c']
  
>>>
  利用分片操作,我们可以实现序列的插入操作---插入不过是替换掉某段“空”分片:
>>> str3=[1,5]  
>>> str3[1:1]=[2,3,4]
  
>>> str3
  
[1, 2, 3, 4, 5]
  
>>>

列表方法
  方法与函数关系密切。方法本身就是函数,只不过这函数是和对象结合在一起的,通过对象来调用方法。面向对象语言中这些方法可称为接口。方法调用的语法为:

  对象.方法(参数)

  接下来我们就来看看列表这种类型的对象提供了什么方法(接口)。

append
  功能:用于在列表末尾追加新的元素
>>> lst=[1,2,3]  
>>> lst.append(4)
  
>>> lst
  
[1, 2, 3, 4]
  
>>>

count
  功能:用于统计某个元素在列表中出现的次数
>>> [1,2,3,4,5,2,3,1,2,3,42,1,2,3,5].count(1)  
3
  
>>>

extend
  功能:在列表末尾一次性追加另一个序列中的多个值
>>>  
>>> a=[1,2,3]
  
>>> b=[4,5,6]
  
>>> a.extend(b)
  
>>> a
  
[1, 2, 3, 4, 5, 6]
  
>>>

index
  功能:用于从列表中找出某个值第一个匹配项的索引位置
>>> a=['Me','and','my','broken']  
>>> a.index('my')
  
2
  
>>>

insert
  功能:用于将对象插入到列表中对应位置
>>>  
>>> number=[1,2,3,4,5]
  
>>> number.insert(3,'hello')
  
>>> number
  
[1, 2, 3, 'hello', 4, 5]
  
>>> number.insert(3,6)
  
>>> number
  
[1, 2, 3, 6, 'hello', 4, 5]
  
>>>

pop
  功能:该方法从列表中弹出一个元素,默认是最后一个。并且返回弹出的元素
>>>  
>>> number=[1,2,3,4,5,6,7,8]
  
>>> a = number.pop()
  
>>> a
  
8
  
>>> number
  
[1, 2, 3, 4, 5, 6, 7]
  
>>>
  利用append(从末尾添加一个元素)方法,我们可以来实现一种常见的数据结构--栈。
  当然,POP方法可以从序列中弹出任意位置的元素:
>>>  
>>> number
  
[1, 2, 3, 4, 5, 6, 7]
  
>>> number.pop(3)
  
4
  
>>> number
  
[1, 2, 3, 5, 6, 7]
  
>>>

remove
  功能:从列表中移除某个值的第一个匹配项。与pop不同的是,该方法并不返回移除的元素。
>>> str4 = list('hello')  
>>> str4
  
['h', 'e', 'l', 'l', 'o']
  
>>> str4.remove('l')
  
>>> str4
  
['h', 'e', 'l', 'o']
  
>>>

reverse
  功能:该方法对序列方向存放
>>>  
>>> number
  
[1, 2, 3, 5, 6, 7]
  
>>> number.reverse()
  
>>> number
  
[7, 6, 5, 3, 2, 1]
  
>>>
  注意该方法改变了列表但是没有返回值。
  如果需要对一个序列进行反向迭代,可以使用reversed函数。这个函数并不返回一个列表,而是返回一个迭代器对象,可以使用list把迭代器对象转换成列表:
>>>  
>>> number
  
[7, 6, 5, 3, 2, 1]
  
>>> number = list(reversed(number))
  
>>> number
  
[1, 2, 3, 5, 6, 7]
  
>>>

sort
  功能:用于在原位置度列表进行排序。 在原位置意味着列表会被修改。
>>> number  
[1, 4, 3, 7, 4, 8, 3, 2, 7, 9]
  
>>> number.sort()
  
>>> number
  
[1, 2, 3, 3, 4, 4, 7, 7, 8, 9]
  
>>>
  应注意的是,sort()方法的返回值并不是序列本身,而是None。

如何保存原序列顺序而进行排序?


  • 方法一
>>>  
>>> x = [3,5,7,3,1,2,4]
  
>>> y =x[:]
  
>>> y.sort()
  
>>> x
  
[3, 5, 7, 3, 1, 2, 4]
  
>>> y
  
[1, 2, 3, 3, 4, 5, 7]
  
>>>
  注意将列表x赋值给列表y时千万别使用直接赋值,否则y与x指向了相同的对象,对y的修改即是对x的修改:
>>>  
>>> x
  
[3, 5, 7, 3, 1, 2, 4]
  
>>> y=x
  
>>> y.sort()
  
>>> x
  
[1, 2, 3, 3, 4, 5, 7]
  
>>> y
  
[1, 2, 3, 3, 4, 5, 7]
  
>>>


  • 方法二
  当然,你也可以使用函数来进行排序。
  函数:sorted().
  功能:对任何序列进行排序,结果返回一个排好序的列表
>>>  
>>> x=[3,5,2,1,7,4,8,9,3]
  
>>> y=sorted(x)
  
>>> x
  
[3, 5, 2, 1, 7, 4, 8, 9, 3]
  
>>> y
  
[1, 2, 3, 3, 4, 5, 7, 8, 9]
  
>>>

如何修改排序规则?
  从上面的例子我们看到,sort方法的默认排序都是升序的。sort方法有两个可选的参数,可以通过它来修改排序规则:


  • key
  key参数提供一个在排序过程中使用的函数,利用该函数来为列表中元素创造一个键(key),依据键来对列表元素(值)进行排序。
>>>  
>>> str5= ['one','year','like','any','old','other','year']
  
>>> #默认的排序依据字符串排序规则
  
>>> str5.sort()
  
>>> str5
  
['any', 'like', 'old', 'one', 'other', 'year', 'year']
  
>>> #使用key参数来修改排序规则
  
>>> #我们使用字符长度作为键来排序
  
>>> str5.sort(key=len)
  
>>> str5
  
['any', 'old', 'one', 'like', 'year', 'year', 'other']
  
>>>


  • reverse
  另一个参数reverse是个简单的bool值,用来指明是否要反向排序;
>>>  
>>> num=[2,3,4,5,6,78,4,3,3,4,5,8,9]
  
>>> num.sort()
  
>>> num
  
[2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 8, 9, 78]
  
>>> num.sort(reverse=True)
  
>>> num
  
[78, 9, 8, 6, 5, 5, 4, 4, 4, 3, 3, 3, 2]
  借助参数key,我们可以定义自己的比较函数来自定义比较规则。函数的定义在后面进行介绍。

元组
  元组与列表的区别就在于,元组是一种不可变序列。元组变量的赋值要在定义时就进行,这就像C语言中的const变量或是C++的引用,定义时赋值之后就不允许有修改。元组存在的意义是:


  • 元组在映射中可以作为键使用,因为要保证键的不变性。
  • 元组作为很多内置函数和方法的返回值存在。
tuple()函数
  类比于列表的list()函数,元组有tuple()函数来返回元组。
>>>  
>>> tul1= tuple('abcdef')
  
>>> tul1
  
('a', 'b', 'c', 'd', 'e', 'f')
  
>>>

元组语法
  从tuple返回的元组我们看到,元组的语法是用圆括号(大部分时候是)括起来的、用逗号加以分隔的元素的集合。逗号在元组构成中十分重要:
>>>  
>>> #这是一个数学数
  
>>> (1)
  
1
  
>>> #这是一个元组
  
>>> (1,)
  
(1,)
  
>>>
  一个更加明显的例子:
>>>  
>>> a = 10*(1)
  
>>> b = 10*(1,)
  
>>> a
  
10
  
>>> b
  
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
  
>>>
  了解了逗号在元组构成的重要性后,我们来看如何定义各种元组

定义元组

定义空元组
>>>  
>>> tul1=()
  
>>> tul1
  
()
  
>>>

定义只有一个元素的元组
>>>  
>>> tul2=(1,)
  
>>> tul2
  
(1,)
  
>>>
  定义多个元素构成的元组类似于定义一个元素的元组,也可以使用tuple函数把其他序列转换为元组:
>>>  
>>> a = [1,2,3,4,5,6]
  
>>> b = tuple (a)
  
>>> b
  
(1, 2, 3, 4, 5, 6)
  
>>>

元组操作
  因为元组不可修改,与列表比较少了很多操作,比如attend、insert 等。而其他操作例如分片、索引操作等都类似于列表。故在使用元组时,时刻记住元组不可修改,自然就知道元组有哪些操作了。
  多谢看完文章,如所记有差错恳请指出。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145120-1-1.html 上篇帖子: Python-深入理解元类(metaclass) 下篇帖子: Python 远程桌面协议RDPY简介
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表