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

[经验分享] Python 元组和集合的特点及常用操作

[复制链接]

尚未签到

发表于 2018-8-9 08:13:01 | 显示全部楼层 |阅读模式
  一、元组的特点:
  1、有序的集合
  2、通过偏移来取数据
  3、属于不可变的对象,不能在原地修改内容,没有排序,修改等操作。
  tuple支持的方法很少
>>> dir(tuple)  
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
>>> a = (1,2,3)  
>>> a[0]
  
1
  
>>> a[1:3]
  
(2, 3)
  通过tuple的类型转换,来修改变量的引用
>>> a = (1,2,3)  
>>> b= list(a)
  
>>> b[0]=5
  
>>> type(b)
  
<type 'list'>
  
>>> b
  
[5, 2, 3]
  
>>> a=tuple(b) ###新生成了一个对象,表面上是修改成功了
  
>>> a
  
(5, 2, 3)
  思考:元组不能改变,那为什么有列表,还要有元组呢?元组一般当成参数传递给方法,而不是传递列表,元组不可变的好处,保证数据的安全,比如我们传给一个不熟悉的方法或者数据接口,确保方法或者接口不会改变我们的数据从而导致程序问题。
#!/usr/bin/python  
#coding:utf-8
  
def info(a):
  
    ""我们不熟悉的方法""
  
print 'sss %d' % id(a)
  
a[0]="haha"
  
return a
  
a = [1,2,3]
  
print "start-"
  
print id(a)
  
info(a) #一个列表传给了一个方法,却改变了这个列表的值,这里如果是a=(1,2,3)则相对的安全
  
print a
#!/usr/bin/python  
#coding:utf-8
  
def info(a):
  
    b =a[:] #拷贝会生成一个新的列表对象
  
print 'sss %d' % id(a)
  
b[0]="haha"
  
return a #不会修改列表的值
  
a = [1,2,3]
  
print "start-"
  
print id(a)
  
info(a)
  
print a
  二、集合:集合是没有顺序的概念。所以不能用切片和索引操作。内置方法set(),接收可迭代的对象,如果对象有__iter__ 属性,就是可以迭代的对象,如字符串、列表、元组
  1、创建集合。set():可变的 ;不可变的frozenset():
  2、添加操作: add,update,注意update和add的区别
  3、删除 remove
  4、成员关系 in,not in
  6、交集,并集,差集 & | -
  7、set去重  列表内容元素重复
>>> b=set('abc')  
>>> b
  
set(['a', 'c', 'b'])
  
>>> b.add('python') #作为一个整体,添加单个对象到集合里
  
>>> b
  
set(['a', 'python', 'c', 'b'])
  
>>> b.update('hello') #打散了,把对象里的每个元素添加到集合里
  
>>> b
  
set(['a', 'c', 'b', 'e', 'python', 'h', 'l', 'o'])
>>> b.remove('python')  
>>> b.remove('python') #删除不存在的原始,会有异常
  
Traceback (most recent call last):
  
  File "<stdin>", line 1, in ?
  
KeyError: 'python'
  
>>> b
  
set(['a', 'c', 'b', 'e', 'h', 'l', 'o'])
>>> 'c' in b  
True
  
>>> 'x' in b
  
False
  
>>> 'x' not in b
  
True
>>> a = set('abcd')  
>>> b= set('bcdef')
  
>>> a & b  #求集合的交集
  
set(['c', 'b', 'd'])
  
>>> a | b  #求并集
  
set(['a', 'c', 'b', 'e', 'd', 'f'])
  
>>> a - b  #求差集
  
set(['a'])
  ##不可变集合,frozenset,不能进行添加,修改和删除的操作
>>> a = frozenset('bac')  #frozenset是有序的  
>>> a.add('a')
  
Traceback (most recent call last):
  
  File "<stdin>", line 1, in ?
  
AttributeError: 'frozenset' object has no attribute 'add'
  
>>> a.remove('a')
  
Traceback (most recent call last):
  
  File "<stdin>", line 1, in ?
  
AttributeError: 'frozenset' object has no attribute 'remove'
  
>>> a
  
frozenset(['a', 'c', 'b'])
  ##判断2个集合是否相等,和元素本身有关,和顺序无关。
>>> print set('abc') == set('cba')  
True
  list 去重的两种方法
  l
iststr = ['haha','gag','hehe','haha']  
#for循环
  
m = []
  
for i in liststr:
  
    if i not in m:
  
        m.append(i)
  

  
print m
  
['haha', 'gag', 'hehe']
>>> m = set(liststr)  
>>> m
  
set(['gag', 'hehe', 'haha'])
  
>>> print list(m)
  
['gag', 'hehe', 'haha']
  练习:
  a = (1,2,3)
  一、用2种方法输出实现下面的结果:
  (5,2,3)
>>> a = (1,2,3)  
>>> b=list(a)
  
>>> b[0]=5
  
>>> a=tuple(b)
  
>>> a
  
(5, 2, 3)
  2 判断2是否在元组里
>>> 2 in a  
True
  二、集合a = set(['a','b','c'])做下面的操作:
  1、添加字符串'jay'到集合a里。
  
>>> a = set(['a','b','c'])
  
>>> a.add('jay')
  
>>> a
  
set(['a', 'c', 'b', 'jay'])
  2、集合b = set(['b','e','f','g']) 用2种方法求集合a 和集合b的并集。
>>> b = set(['b','e','f','g'])  
>>> a
  
set(['a', 'c', 'b', 'jay'])
  
>>> a|b
  
set(['a', 'c', 'b', 'e', 'g', 'jay', 'f'])

运维网声明 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-548884-1-1.html 上篇帖子: suse下升级python工作记录20130615-always 下篇帖子: python 编写SM3算法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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