python集合有什么特点_Python 元组和集合的特点及常用操作

一、元组的特点:

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)

>>> 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 "", 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 "", line 1, in ?

AttributeError: ‘frozenset‘ object has no attribute ‘add‘

>>> a.remove(‘a‘)

Traceback (most recent call last):

File "", line 1, in ?

AttributeError: ‘frozenset‘ object has no attribute ‘remove‘

>>> a

frozenset([‘a‘, ‘c‘, ‘b‘])

##判断2个集合是否相等,和元素本身有关,和顺序无关。>>> print set(‘abc‘) == set(‘cba‘)

True

list 去重的两种方法

liststr = [‘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‘])

本文出自 “小鱼的博客” 博客,谢绝转载!

原文地址:http://395469372.blog.51cto.com/1150982/1748119

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值