当前位置:首页 » 服务存储 » py存储集合
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

py存储集合

发布时间: 2023-01-05 18:10:31

‘壹’ Python中内置数据类型list,tuple,dict,set的区别和用法

这篇文章主要给大家介绍了Python中内置数据类型list,tuple,dict,set的区别和用法,都是非常基础的知识,十分的细致全面,有需要的小伙伴可以参考下。

Python语言简洁明了,可以用较少的代码实现同样的功能。这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set。这里对他们进行一个简明的总结。
List
字面意思就是一个集合,在Python中List中的元素用中括号[]来表示,可以这样定义一个List:
L = [12, 'China', 19.998]

可以看到并不要求元素的类型都是一样的。当然也可以定义一个空的List:
L = []

Python中的List是有序的,所以要访问List的话显然要通过序号来访问,就像是数组的下标一样,一样是下标从0开始:
>>> print L[0]
12

千万不要越界,否则会报错
>>> print L[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
IndexError: list index out of range

List也可以倒序访问,通过“倒数第x个”这样的下标来表示序号,比如-1这个下标就表示倒数第一个元素:
>>> L = [12, 'China', 19.998]
>>> print L[-1]
19.998

-4的话显然就越界了
>>> print L[-4]

Traceback (most recent call last):
File "<pyshell#2>", line 1, in <mole>
print L[-4]
IndexError: list index out of range
>>>

List通过内置的append()方法来添加到尾部,通过insert()方法添加到指定位置(下标从0开始):
>>> L = [12, 'China', 19.998]
>>> L.append('Jack')
>>> print L
[12, 'China', 19.998, 'Jack']
>>> L.insert(1, 3.14)
>>> print L
[12, 3.14, 'China', 19.998, 'Jack']
>>>

通过pop()删除最后尾部元素,也可以指定一参数删除指定位置:
>>> L.pop()
'Jack'
>>> print L
[12, 3.14, 'China', 19.998]
>>> L.pop(0)
12
>>> print L
[3.14, 'China', 19.998]

也可以通过下标进行复制替换
>>> L[1] = 'America'
>>> print L
[3.14, 'America', 19.998]

Tuple
Tuple可以看做是一种“不变”的List,访问也是通过下标,用小括号()表示:
>>> t = (3.14, 'China', 'Jason')
>>> print t
(3.14, 'China', 'Jason')

但是不能重新赋值替换:
>>> t[1] = 'America'

Traceback (most recent call last):
File "<pyshell#21>", line 1, in <mole>
t[1] = 'America'
TypeError: 'tuple' object does not support item assignment

也没有pop和insert、append方法。
可以创建空元素的tuple:
t = ()
或者单元素tuple (比如加一个逗号防止和声明一个整形歧义):
t = (3.14,)
那么tuple这个类型到底有什么用处呢?要知道如果你希望一个函数返回多个返回值,其实只要返回一个tuple就可以了,因为tuple里面的含有多个值,而且是不可变的(就像是java里面的final)。当然,tuple也是可变的,比如:
>>> t = (3.14, 'China', 'Jason', ['A', 'B'])
>>> print t
(3.14, 'China', 'Jason', ['A', 'B'])
>>> L = t[3]
>>> L[0] = 122
>>> L[1] = 233
>>> print t
(3.14, 'China', 'Jason', [122, 233])

这是因为Tuple所谓的不可变指的是指向的位置不可变,因为本例子中第四个元素并不是基本类型,而是一个List类型,所以t指向的该List的位置是不变的,但是List本身的内容是可以变化的,因为List本身在内存中的分配并不是连续的。
Dict
Dict是Python中非常重要的数据类型,就像它的字面意思一样,它是个活字典,其实就是Key-Value键值对,类似于HashMap,可以用花括号{}通过类似于定义一个C语言的结构体那样去定义它:
>>> d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59,
'Paul': 75
}
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}

可以看到打印出来的结果都是Key:Value的格式,可以通过len函数计算它的长度(List,tuple也可以):
>>> len(d)
4
可以直接通过键值对方式添加dict中的元素:
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}
>>> d['Jone'] = 99
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Jone': 99, 'Bart': 59}

List和Tuple用下标来访问内容,而Dict用Key来访问: (字符串、整型、浮点型和元组tuple都可以作为dict的key)
>>> print d['Adam']
95

如果Key不存在,会报错:
>>> print d['Jack']

Traceback (most recent call last):
File "<pyshell#40>", line 1, in <mole>
print d['Jack']
KeyError: 'Jack'

所以访问之前最好先查询下key是否存在:
>>> if 'Adam' in d : print 'exist key'

exist key

或者直接用保险的get方法:
>>> print d.get('Adam')
95
>>> print d.get('Jason')
None

至于遍历一个dict,实际上是在遍历它的所有的Key的集合,然后用这个Key来获得对应的Value:
>>> for key in d : print key, ':', d.get(key)

Lisa : 85
Paul : 75
Adam : 95
Bart : 59

Dict具有一些特点:
查找速度快。无论是10个还是10万个,速度都是一样的,但是代价是耗费的内存大。List相反,占用内存小,但是查找速度慢。这就好比是数组和链表的区别,数组并不知道要开辟多少空间,所以往往开始就会开辟一个大空间,但是直接通过下标查找速度快;而链表占用的空间小,但是查找的时候必须顺序的遍历导致速度很慢
没有顺序。Dict是无顺序的,而List是有序的集合,所以不能用Dict来存储有序集合
Key不可变,Value可变。一旦一个键值对加入dict后,它对应的key就不能再变了,但是Value是可以变化的。所以List不可以当做Dict的Key,但是可以作为Value:

>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Jone': 99, 'Bart': 59}
>>> d['NewList'] = [12, 23, 'Jack']
>>> print d
{'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 99, 'Lisa': 85, 'Paul': 75}

Key不可重复。(下面例子中添加了一个'Jone':0,但是实际上原来已经有'Jone'这个Key了,所以仅仅是改了原来的value)

>>> print d
{'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 99, 'Lisa': 85, 'Paul': 75}
>>> d['Jone'] = 0
>>> print d
{'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 0, 'Lisa': 85, 'Paul': 75}

Dict的合并,如何将两个Dict合并为一个,可以用dict函数:
>>> d1 = {'mike':12, 'jack':19}
>>> d2 = {'jone':22, 'ivy':17}
>>> dMerge = dict(d1.items() + d2.items())
>>> print dMerge
{'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}

或者
>>> dMerge2 = dict(d1, **d2)
>>> print dMerge2
{'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}

方法2比方法1速度快很多,方法2等同于:
>>> dMerge3 = dict(d1)
>>> dMerge3.update(d2)
>>> print dMerge
{'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}

set
set就像是把Dict中的key抽出来了一样,类似于一个List,但是内容又不能重复,通过调用set()方法创建:
>>> s = set(['A', 'B', 'C'])
就像dict是无序的一样,set也是无序的,也不能包含重复的元素。
对于访问一个set的意义就仅仅在于查看某个元素是否在这个集合里面:
>>> print 'A' in s
True
>>> print 'D' in s
False

大小写是敏感的。
也通过for来遍历:
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
#tuple
for x in s:
print x[0],':',x[1]

>>>
Lisa : 85
Adam : 95
Bart : 59

通过add和remove来添加、删除元素(保持不重复),添加元素时,用set的add()方法:
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])

如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:
>>> s = set([1, 2, 3])
>>> s.add(3)
>>> print s
set([1, 2, 3])

删除set中的元素时,用set的remove()方法:
>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])

如果删除的元素不存在set中,remove()会报错:
>>> s = set([1, 2, 3])
>>> s.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
KeyError: 4

所以如果我们要判断一个元素是否在一些不同的条件内符合,用set是最好的选择,下面例子:
months = set(['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec',])
x1 = 'Feb'
x2 = 'Sun'

if x1 in months:
print 'x1: ok'
else:
print 'x1: error'

if x2 in months:
print 'x2: ok'
else:
print 'x2: error'

>>>
x1: ok
x2: error

‘贰’ Python中的序列与集合

之前有说到 Python 中的字符串、列表以及元组在很多方面上比较相似,很大程度是因为它们的数据存储是有序的,也就是我们统称的序列,这才能让我们通过序号进行数据的获取,就像下面这样。

既然已经有了个统称,那么必然它们可以有相同的特性,这里列举了几个常用的方法,针对有序序列都是通用的。

如图可知这几个方法的大体意思,在我们判断一个元素是否存在于序列的时候会采取 in 或者not in 操作,返回值就是 bool 类型;使用 len 方法来获取序列的长度,通过 max 和 min 来得到序列中的最大值和最小值。

不过这里有个需要提醒的就是在我们判断字符串的极大值和极小值的时候,我们是通过 Ascll 码来比较的,所谓的这个码其实就是数值,我们通过 ord 方法可以得到字符串或者数字的Ascll 码,然后再来比较得到极大值和极小值。(空字符串也是有 Ascll 码的)

说了序列那么多,我们现在进入正题哈,说说集合,一个有区别于序列的数据类型。

如图所示,集合是由花括号包裹的编写形式,而且大体也拥有部分序列的特性,当然集合与序列最大的不同就是,集合是无序的,也就是说我们不能通过序号去得到相应的集合元素。那怎么得到集合中的元素呢,这个之后再说,我们先来看集合的一些特性。

对比着图中的输出结果,可能有人大概猜到一些东西,这里介绍了三种运算符。首先看看我们的减号在集合中的意义,当一个集合减去另一个集合得到一个新集合,其实也就类似于删除的感觉,在数学中我们叫做差集(不理解可以翻课本哈),在第一个集合中去除第二个集合中的元素,可能有人问,如果第二个集合更大怎么说,那么得到的就应该是空的集合,不理解的可以尝试看看。

然后我们再来看 & 操作,它代表的意思是取出两个集合中共同的元素组成的新集合,在数学中我们叫做交集,于此关于 | 操作,它代表的就是两个集合的合并,在数学中叫做并集,而这里又涉及到集合的一个重要特性,也就是不重复性,在一个集合中是不会出现相同的元素,不管是如何的操作,最后都会去除其中的重复元素。

说完这几种集合中的操作,我们再来看如何表示一个空的集合呢,如下:

由图可知,仅仅一个花括号并不能表示一个空集合,反而表示的是另外的一个数据类型,这个类型我们之后再说,那真正表示一个空集合就是 set() 。

好了,序列和集合的就说这么多,后面再说说其它的数据类型。

‘叁’ python--set(集合)

一、创建集合

创建非空集合:集合中set括号中需要的参数的数据类型有:序列(包括字符串、列表、元组),字典可以转为集合,注意数值类型不能作为集合的参数,如int类型。

二、添加元素

add() 方法是将要添加的元素作为一个整体添加到集合中

update() 方法是把要传入的元素拆分成单个字符,存于集合中,并去掉重复的

三、删除元素

集合的删除操作使用的方法跟列表是一样的,使用的也是 remove 方法,只能单个删除

四、遍历集合

五、集合与字符串、列表、元组互转,集合转字典

六、查找元素并删除

函数原型: a.discard(b)

参数说明:a为一个set类型的变量;b表示要查找并删除的元素

函数作用:在集合setVar中查找element元素,如果存在则删除;如果没找到,则什么也不做。该函数没有返回值

七、pop用法

函数原型: set1.pop()     删除并返回集合set1中的第一个元素,如果为空引发KeyError错误+

八、clear、和len的用法

clear     方法用于清空集合中的所有元素

    方法用于集合拷贝

len     跟求序列的长度的函数len()是一样的,返回的是集合中有多少个元素

九、求集合的交集、并集、差集和difference的用法

求集合的 交集 使用的符号是 “&”

求集合的 并集 用的是符号 “|”

求集合的 差集 使用的符号是减号 “-”

difference    等价于集合的差集 ,查看两个集合的不同之处。这种不同指的是集合s1相对于集合s2,不同的地方,也就是所有在集合s1中,而不再集合s2中的的元素组成的新集合

十、运算符判断集合间关系和issuperset、issubset的用法

集合可以使用大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)来判断某个集合是否完全包含于另一个集合,也可以使用子父集判断函数。

issuperset     集合st1是否是集合st2的父集

issubset     集合st1是否是集合st2的子集

十一、不可变集合frozenset的用法

frozenset     该集合中的内容是不可改变的,其他功能及操作跟可变集合set一样

‘肆’ python数据类型(集合)

    1.集合(set)是一个无序不重复元素的序列(意思是有重复的会自动删除,每次打印元素的位置不一定)

    2.基本功能是进行成员关系测试和删除重复元素

    3.可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典

    4.因为set存储的是无序集合,所以我们没法通过索引来访问。访问 set中的某个元素实际上就是判断一个元素是否在set中。

1.创建集合

s=set()#创建一个空集合

s1={1,2,3,'a','python'}

2.删除重复的元素

集合是一个无序不重复元素的序列(意思是有重复的会自动删除,每次打印元素的位置不一定)

3.成员关系测试(检测某个成员是否在集合中)

案例:从终端输入5位数,以空格隔开,把这5位数存入列表中,剔除重复的数据,打印出来

#提示,列表转集合,集合转列表

a=input("请输入5位数字:")

mylist=a.split()

print(mylist)

b=set(mylist)

c=list(b)

print(c)

4.集合常用操作

    1.添加元素

    2.删除元素

    3.删除整个集合

    4.获取集合的长度

    5.不支持改元素

集合操作-添加元素

格式:

集合.add(元素)

格式:

集合.update(元素)

区别:

add不能添加列表,update可以

update是将字符串中的拆分成字符进行追加

add,是当做整体追加在集合中

#案例:从终端输入一个数字就加入集合中,然后打印,又输入一个数字,然后打印,直到输入-1,退出输入

#然后打印最终的集合

ms=set()

while 1:

a=int(input("请输入一个数字:"))

if a==-1:

    break

    ms.add(a)

print(ms)

print(ms)

#案例:从终端输入一个字符串就加入集合中,然后打印,又输入一个字符串,然后打印,直到输入q,退出输入

#然后打印最终的集合,字符串要分开存储,如输入hello,存储的列表是{'h','e','l','0'}

ms=set()

while 1:

a=input("请输入一个字符串:")

if a=='q':

    break

    ms.update(a)

print(ms)

print(ms)

集合操作-删除元素及删除整个集合

格式:

集合.remove(元素)  # 元素如果不存在会引发KeyError

集合.discard(元素)  # 元素如果不存在不发生任何事

集合.pop()  # 集合元素是字符串类型时删除随机元素。 集合元素是其他数据类型时,删除左边第一个元素

del 集合名 #删除整个集合

#案例:有集合{1,2,3,'hello','world'},删除全部字符串,然后最左边第一个元素

a={1,2,3,'hello','world'}

a.discard("hello")

a.discard("world")

a.pop()

print(a)

集合操作-获取集合的长度

格式:

len(集合名)

#案例:有集合{1,2,3,4,'hello','a'},保留1个元素,其他的删除,假如元素个数不确定

s={1,2,3,4,'hello','a'}

for i  in range(len(s)-1):

            s.pop()

  print(s)

集合的集运算

集合的交集,并集,差集,对称差集的运算

{1,2,3,4}交集{4,5,6,7} -->4   交集(&)

{1,2,3,4}并集{4,5,6,7} ->1,2,3,4,5,6,7  并集(|)

{1,2,3,4}差集{4,5,6,7} ->1,2,3  差集(-)

{1,2,3,4}对称差集{4,5,6,7}->1,2,3,5,6,7 4同时出现在两个集合中,不选它 对称差集(^)

#案例:使用花括号和set创建各一个集合,然后对集合进行交、并、差、对称差运算

s={1,2,3,4,5,6}

s1=set([6,7,8,9,10])

print(s&s1)

print(s|s1)

print(s-s1)

print(s^s1)

‘伍’ Python 列表内存浅析

序列是Python中最基本的数据结构。序列是一种数据存储方式,用来存储一系列的数据。

在内存中,序列就是一块用来存放多个值的连续的内存空间。比如一个整数序列[10,20,30,40]

序列中的每个元素都分配一个数字 - 它的位置,或索引。第一个索引是0,第二个索引是1,依此类推。

列表:用于存储任意数目、任意类型的数据集合。

列表是内置可变序列,是包含多个元素的有序连续的内存空间。列表定义的标准语法格式:

其中,10,20,30,40 这些称为:列表a的元素。

列表中的元素可以各不相同,可以是任意类型。比如:a = [10,20,"abc",True,[]]

当列表增加元素时,列表会自动进行内存管理,减少了程序员的负担。但是列表元素大量移动,效率低所以一般建议在尾部添加。

本地电脑运行结果:

列表是可变数据类型,地址不变,值可变。因此,添加新的值之后,地址也是不变的。

解析:在索引2处要引用50这个元素

申请了8个内存空间但是list实际用来存储元素只使用了其中5个内存空间
insert的时间复杂度是O(n)

pop () 方法 删除并返回指定位置的元素,如果未指定位置则默认操作

pop () 方法 删除并返回指定位置的元素,如果未指定位置则默认操作

结果运行:

‘陆’ python集合

*事先说明:以下代码及结果来自本设备Python控制台,在不同设备上可能结果有区别,望自己尝试为妙


集合(set),是一种Python里的(class),

集合类似于列表(list)可更改可迭代(iterable),但是元素不重复

定义集合使用花括号{},例如

>>> s = {"apple", "banana", "strawberry", "watermelon"}

警告!!!如果使用空括号

>>> a = {}

>>> a.__class__

<class 'dict'>

a将成为一个字典

想要定义空集合,

请使用类名。

>>> a = set()

类名定义也可以把迭代转换为集合:

>>> b = set("abc")

>>> b

{'a', 'b', 'c'}

但是,保存后它是无序的。

>>> s

{'banana', 'watermelon', 'strawberry', 'apple'}

(结果仅供参考,在不同设备上略有不同)

下面介绍它的性质:

1. 可更改:

  • 使用add(x)方法添加元素x

>>> s.add("lemon")

>>> s

{'banana', 'strawberry', 'lemon', 'watermelon', 'apple'}


  • 使用update(iter1, iter2, …)方法添加多个可迭代对象(如列表,元组(tuple),另一个集合)里的元素:

>>> s.update(("orange", "grape"))

>>> s

{'banana', 'strawberry', 'orange', 'lemon', 'watermelon', 'apple', 'grape'}

警告!!!如果使用字符串,字符串也会被迭代:

>>> a = set()

>>> a.update("apple")

>>> a

{'a', 'p', 'e', 'l'}


  • 使用remove(x)移除元素x,如果x不存在,则抛出KeyError错误

>>> s.remove("lemon")

>>> s

{'banana', 'strawberry', 'orange', 'watermelon', 'apple', 'grape'}

>>> s.remove("cat")

Traceback (most recent call last):

File "<stdin>", line 1, in <mole>

s.remove("cat")

KeyError: 'cat'


  • 使用discard(x)移除元素x,不会发生错误

>>> s.discard("grape")

>>> s

{'banana', 'strawberry', 'orange', 'watermelon', 'apple'}

>>> s.discard("dog")

>>> s

{'banana', 'strawberry', 'orange', 'watermelon', 'apple'}

2. 可迭代:

>>> for x in s:

... print(x)


banana

strawberry

orange

watermelon

apple


3. 可以使用 len 函数获取集合长度;

>>> len(s)

5

可以使用in关键字检查一个元素是否在集合内,将返回逻辑值(bool)

>>> "apple" in s

True

>>> "candy" in s

False

4.集合具有不重复性,因此它会自动去重:

>>> c = set("Hello World!")

>>> c

{' ', 'e', 'l', 'H', '!', 'r', 'W', 'o', 'd'}

5. 集合的运算

>>> d = set("abcdef")

>>> e = set("efghij")

>>> d

{'c', 'e', 'a', 'b', 'f', 'd'}

>>> e

{'h', 'e', 'g', 'j', 'f', 'i'}

>>> d - e # 集合d去掉集合e含有的元素,或者说集合d包含而集合e不包含的元素(不改变原集合)

{'a', 'b', 'd', 'c'}

>>> d | e # 集合d,e的所有元素

{'c', 'e', 'h', 'g', 'a', 'b', 'j', 'f', 'd', 'i'}

>>> d & e # 集合d,e都包含的元素

{'f', 'e'}

>>> d ^ e # 不同时出现在集合d, e中的元素

{'c', 'g', 'h', 'a', 'b', 'j', 'd', 'i'}

注意!!!

字符串、列表通用的+和*不适用于集合

>>> "abc" + "def"

'abcdef'

>>> [1, 2, 3] + [4, 5, 6]

[1, 2, 3, 4, 5, 6]

>>> d + e

Traceback (most recent call last):

File "<stdin>", line 1, in <mole>

d + e

TypeError: unsupported operand type(s) for +: 'set' and 'set'

>>> "a" * 5

'aaaaa'

>>> [1] * 3

[1, 1, 1]

>>> d*3

Traceback (most recent call last):

File "<stdin>", line 1, in <mole>

d * 2

TypeError: unsupported operand type(s) for *: 'set' and 'int'

(作者的小观点:既然集合是不能重复的,那么乘以、重复是没有意义的)

‘柒’ Python基础必掌握的集合Set使用

数学中对集合的严格定义可能是抽象的且难以掌握。但实际上可以将集合简单地认为是定义明确的不同对象的集合,通常称为元素或成员。

Python 提供了一个内置的集合类型来将对象分组到一个集合中。集合类型(set type)是处理集合的数据类型。

集合类型的特点是它是一种与列表类型非常相似的数据类型,但它不能存储重复值,它没有下标和键等概念,并且是唯一元素,并且元素是可维护的。

利用这个特性,集合类型可以进行集合、交集、差等集合操作,适合管理类型。

整套学习自学教程中应用的数据都是《三国志》、《真·三国无双》系列 游戏 中的内容。

集合是无序的,并且元素是唯一的,集合本身可以修改,但集合中包含的元素必须是不可变类型。


list方式

tuple方式

字符串方式

list和dict不能被set

方法 len() 、in 、 not in 的应用。





x1.union(x2[, x3 ...])

x1 | x2 [| x3 ...]

多种合并操作



x1.intersection(x2[, x3 ...])

x1 & x2 [& x3 ...]

多种交集操作



x1.difference(x2[, x3 ...])

x1 - x2 [- x3 ...]

更多的是集合差异操作



x1.symmetric_difference(x2)

x1 ^ x2 [^ x3 ...]

更多的集合对称差操作

x1.isdisjoint(x2) ,包含返回 False,不包含返回 True(x1 & x2是空集)。

x1.issubset(x2) ,是则返回 True,否则返回 False,即x1

‘捌’ python中集合的特点和注意点

集合的特点:
1.不同元素组成(元素不能重复百)
2.无序(集合元素的顺序和定义、添加的顺序不一致)
3.集合中的元素必度须是不可变类型
集合的注意点:
1.定义一个集合,如果直接写my_set
=
{},不添加数据,python解释器会把my_set作为字典处理版
2.可以在集合中做添加相同元素的操作,但是集合只存储一个
如果想深入了解可以搜索黑马权程序员视频库,里面有很多免费的软件测试教程

‘玖’ Python中内置数据类型list,tuple,dict,set的区别和用法

python 中list,tuple,dict,set是最常用的集合类型。
list列表,相当于一个数组,不过list的长度是自动变化的而且列表元素自由的,不必每个元素都是同一种类型。它的简洁的定义方式是a=[]。有序组合
tuple也是一个组合。不过tuple在定义好之后就不能再变化。它的简洁的定义方式是a=1,3也可以是a=(1,3).有序组合。
dict是字典类型。也就是键值对类型。键名不可以重复,并且不可以变化(字符串就符合这个要求,常用字符串作为键名)。它的简洁的定义方式是a={}.无序组合(意思就是你无法按照添加的顺序对他进行遍历)。
set是set类型(不好翻译,用的也少)。也是一个无序的组合,元素是互斥的,也就不会出现相同的元素。可以把一个序列转换成无重复元素的set.无序组合。
以下是使用的示例代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

a_tuple=(1,3423,'34')
a_list=[12,12.34,'sds']
a_dict={'key1':1,'key2':2}
a_set=set('2323')
for t in a_tuple:
print('%s in tuple'%t)
print('*'*10)
for l in a_list:
print('%s in list'%l)
print('*'*10)
for k,v in a_dict.items():
print('key=%s,value=%s in dict'%(k,v))
print('*'*10)
for s in a_set:
print('%s in set'%s)
print('*'*10)

‘拾’ Python的集合介绍

和列表类似,集合也是一个数据集合,其也不要求元素的类型一致。但是集合有下面两个特点:

•集合内元素唯一。如不可以用1、2、1、1组成集合,因为其包含重复的1。

•集合是无序的,添加元素时不能指定位置,删除元素时也不能通过指定位置,只能通过指定值。当然也不能通过位置来定位某个元素。

1、创建集合

我们可以从列表创建集合,将列表中的元素都加入到集合中,如果有重复的元素就仅保留一个。

a = set([1, 1, 3])

print(a)#输出结果:set([1, 3])     

也可以从元组、字典和其他集合构建集合。比如:

a = set((0, 1, 2, 3, 3, 2))   

使用的是字典的键来构建集合,字典的值没有被使用到,比如:

a = set({1:10, 2:20, 3:30})

从字符串构建集合,其每个字符都成为集合的一个元素,比如:

a = set("abcdefabc") 

输出结果:a={'c', 'e', 'f', 'b', 'd', 'a'}

另外一个集合构建集合,比如:

a = set([1, 2, 3]) 

b = set(a)  输出结果:b={1, 2, 3}

当然也可以构造一个空的集合,使用的方法是set()。空集合没有任何元素,比如:

a = set()

1.添加元——add(值)

该函数只能添加一个元素。

如果添加的元素已经在集合中存在,那么不会发生任何变化。

2.扔掉元素——discard(值)

该函数删除集合中指定的值对应的元素。

如果指定值在集合中不存在,则不做任何操作。

3.删除指定值——remove(值)

该函数和discard()的不同之处在于,如果指定的值在集合中不存在,会抛出异常。

4.清空所有元素——clear()

该函数扔掉所有的元素。执行完该函数后,该集合将变成一个空的集合。

a.clear()

5.删除第一个元素——pop()

如果集合中有元素,则返回值为删除掉的元素的值。

如果集合为空,则抛出异常。

6.得到差集——difference(集合对象)

该函数返回一个新的集合,该集合包含所有属于a而不属于b的元素,如图所示。该操作不会改变原始集合a或者b的内容。

7.差集操作符(-)

该操作符和difference()类似,返回一个新的集合,该集合包含所有属于a而不属于b的元素。该操作不会改变原始输入集合a或者b的内容。

8.从集合中删除另一个集合中存在的元素——difference_update(集合对象)

该函数和difference()的不同是操作数a会被修改,而且没有返回值。

9.得到两个集合的交集——intersection(集合)

该函数返回所有的同时属于集合a和集合b的元素组成的集合,即返回的是一个集合,该集合的所有元素都同时属于集合a和b,如图所示。输入集合a和b在该过程中没有发生任何改变。

10.交集操作符(&)

该操作符和intersection()的效果是一样的。

11.删除集合a中所有不属于集合b的元素——intersection_update(集合)

该函数也是求交集,与intersection()不同的是其修改原始输入集合,并且没有返回值。这也是为何该接口函数后面带有update字样,因为其更新了原来的输入集合。

12.是否存在交集——isdisjoint()

该函数判断是否存在这样的元素,其同时属于集合a和集合b。如果存在这样的元素,返回False;否则返回True。

13.并集——union(集合a,集合b)

该函数返回一个新的集合,该集合的元素要么属于输入集合a要么属于集合b。该操作不修改作为输入的两个集合a和b。如图表示该函数返回的集合的内容。

14.并集操作符(|)

该操作符和union()的效果是一样的。其返回一个并集,并且不修改输入集合的内容。

15.添加属于b而不属于a的元素——update()

该函数在集合a中添加属于b而不属于a的所有元素。该操作和union()不同的是,其修改了输入集合a,并且没有返回值。

16.外集——symmetric_difference()

外集就是由只属于集合a或者只属于集合b的元素组成的集合,如图所示。该操作返回一个新的集合,并且不修改原来的输入集合a和b。

17.外集操作符(^)

该操作符和symmetric_difference()的效果是一样的,也是返回一个新的集合,并且不会修改输入的集合a或者b。

18.a和b的并集减去a和b的交集——symmetric_difference_update()

该函数和symmetric_difference()的区别是,其修改了集合a的值,并且没有返回值。

19.是指定集合的子集吗——issubset()

a是b的子集就是说集合a的所有元素都属于集合b。

如果a等于b,那么a和b互为子集。

20.是指定集合的超集吗——issuperset()

a是b的超集合就是说集合b中的所有元素都属于集合a。

如果a是b的超集,那么b就是a的子集。

如果a等于b,那么它们互为子集,同时也互为超集。