Python学习—元组与集合

1.元组(tuple)

Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。

1.元组定义

(1).定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,并且以后不可更改其值。

>>> tup1 = (‘this‘,‘is‘,‘aaaa‘)
>>> tup2 = (1,2,3,4)
>>> tup3 = (1,2,3,‘ssss‘)
>>> tup4 = ‘aa‘,‘bb‘,‘cc‘,‘dd‘;    #不用括号也可以定义元组
>>> type(tup4)
<class ‘tuple‘>      #可以看到tup4是元组

(2).需要注意:元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。

>>>tup1 = (50)
>>> type(tup1)     # 不加逗号,类型为整型
<class ‘int‘>
>>> tup1 = (50,)
>>> type(tup1)     # 加上逗号,类型为元组
<class ‘tuple‘>

这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,小括号表示数学符号,因此tup1是整型。所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义。

(3).创建空元组

>>> tup1 = ()      #用括号来创建空元组
>>> type(tup1)
<class ‘tuple‘>
>>> tup1
()              #可以看到元组里没有值,为空

(4).最后来看一个“可变的”tuple:

>>> t = (‘a‘, ‘b‘, [‘A‘, ‘B‘])
>>> t[2][0] = ‘X‘
>>> t[2][1] = ‘Y‘
>>> t
(‘a‘, ‘b‘, [‘X‘, ‘Y‘])

这个tuple定义的时候有3个元素,分别是‘a‘,‘b‘和一个list。不是说tuple一旦定义后就不可变了吗?怎么后来又变了?
我们先看看定义的时候tuple包含的3个元素:

当我们把list的元素‘A‘和‘B‘修改为‘X‘和‘Y‘后,tuple变为:

表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向‘a‘,就不能改成指向‘b‘,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
所以要创建一个内容也不变的tuple那就必须保证tuple的每一个元素本身也不能变,即是不可变数据类型。

2.访问元组(索引)

元组可以使用中括号加下标索引来访问元组中的值。

>>> tup1 = (‘this‘,‘is‘,‘aaaa‘)
>>> tup1[0]
‘this‘
>>> tup1[1]
‘is‘
>>> tup1[-1]
‘aaaa‘

3.删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组

>>> tup4
(‘aa‘, ‘bb‘, ‘cc‘, ‘dd‘)
>>> del tup4
>>> tup4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name ‘tup4‘ is not defined     #可以看到,删除元组后再查看元组,错误信息提示元组未被定义

4.元组特性

(1).切片
和列表的切片一样,使用中括号。

>>> tup3
(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)
>>> tup3[:]
(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)
>>> tup3[2:]
(‘aaaa‘, 1, 2, 3, 4)
>>> tup3[:-1]
(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3)
>>> tup3[::-1]
(4, 3, 2, 1, ‘aaaa‘, ‘is‘, ‘this‘)
>>> tup3[::-2]
(4, 2, ‘aaaa‘, ‘this‘)

(2).重复
与列表一样,使用符号*

>>> tup2
(1, 2, 3, 4)
>>> tup3 * 2
(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4, ‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)

(3).连接
与列表一样,使用符号+

>>> tup1 = (‘this‘,‘is‘,‘aaaa‘)
>>> tup2 = (1,2,3,4)
>>> tup3 = tup1 + tup2
>>> tup3
(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)

(4).成员操作符
与列表一样,使用符号:in与not in

>>> tup3
(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)
>>> ‘aaaa‘ in tup3
True
>>> 2 in tup3
True
>>> 4 not in tup3
False

5.元组内置函数

Python元组包含了以下内置函数 方法 描述
len(tuple) 计算元组元素个数。
max(tuple) 返回元组中元素最大值。
min(tuple) 返回元组中元素最小值。
tuple(seq) 将列表转换为元组。

2.集合

没有重复的数据,可以有不同数据类型。集合(set)是一个无序不重复元素的序列(所以不支持索引、切片、重复)。
可以使用大括号 { } 或者 set() 函数创建集合.
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。当用set()创建的集合有多个个元素时,需要将所有的元素再用括号括起来,否则会报错。

1.集合定义

>>> sett = {1,2,3,4}
>>> sett
{1, 2, 3, 4}
>>> s = {1,2,‘hh‘,‘ee‘}
>>> s
{1, 2, ‘ee‘, ‘hh‘}
>>> set1 = {‘apple‘, ‘orange‘, ‘pear‘, ‘banana‘}
>>> set1
{‘orange‘, ‘pear‘, ‘apple‘, ‘banana‘}
>>> set2  = {‘apple‘, ‘orange‘, ‘apple‘, ‘pear‘, ‘orange‘, ‘banana‘}
>>> set2
{‘orange‘, ‘pear‘, ‘apple‘, ‘banana‘}     #集合的去重(集合中不允许有相同的数据,有也只会记录一次,自动将重复的数据省略)

>>> ss = set(‘aa‘,‘bb‘)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: set expected at most 1 arguments, got 2    #set()定义多个元素的集合报错

>>> ss = set((‘aa‘,‘bb‘))    #不会报错
>>> ss
{‘aa‘, ‘bb‘}

定义空集合:

>>>  s = set()
>>> s
set()
>>> type(s)
<class ‘set‘>

2.添加元素:set.add(x)

向已经存在的集合中添加一个元素。如果元素已存在,则不进行任何操作,如果添加多个元素,则会报错。

>>> set1 = {‘aa‘,‘ab‘,1,2}
>>> set1
{‘ab‘, 1, ‘aa‘, 2}
>>> set1.add(‘cc‘)
>>> set1
{1, 2, ‘cc‘, ‘ab‘, ‘aa‘}
>>> set1.add(8,9)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: add() takes exactly one argument (2 given)

还有一个方法,也可以添加元素,且参数是列表,元组,字典,集合,字符串,不能是整数。语法格式如下:
set.update( x )
x 可以有多个,用逗号分开。

>>>set2 = {"Google", "RBQ", "Taobao"}
>>> set2
{‘RBQ‘, ‘Taobao‘, ‘Google‘}
>>> set2.update({1,3})
>>> set2
{1, 3, ‘Google‘, ‘Taobao‘, ‘RBQ‘}
>>> set2.update([1,4],[5,6])
>>> set2
{1, 3, 4, 5, 6, ‘Google‘, ‘Taobao‘, ‘RBQ‘}
>>> set2.update(88)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ‘int‘ object is not iterable

另外再添加字符串的时候,还有一个有趣的现象。

>>> set2.update(‘s‘)
>>> set2
{1, 3, 4, 5, 6, ‘Google‘, ‘Taobao‘, ‘RBQ‘,‘s‘}
>>> set2.update(‘ssss‘)
>>> set2
{1, 3, 4, 5, 6, ‘Google‘, ‘Taobao‘, ‘RBQ‘,‘s‘}    #添加了‘ssss‘结果集合中没有。
>>> set2.remove(‘s‘)
>>> set2
{1, ‘RBQ‘, 3, 4, ‘Taobao‘, ‘Google‘, 5, 6}      #删除了元素‘s‘
>>> set2.update(‘ssss‘)
>>> set2
{1, ‘RBQ‘, 3, 4, ‘Taobao‘, ‘Google‘, 5, 6, ‘s‘}    #重新添加元素‘ssss‘结果集合出现了一个‘s‘
>>> set2.update(‘sss1‘)
>>> set2
{1, 3, 4, 5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘s‘, ‘Google‘}   #添加‘sss1‘结果出现了‘1‘
>>> set2.update(‘sa‘)
>>> set2
{1, 3, 4, 5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}   #添加‘sa‘出现了‘a‘

此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:
set.discard( x )

>>> set1.discard(‘RBQ‘)
>>> set1
{‘ALI‘}
>>> set1.discard(‘ddd‘)
>>> set1
{‘ALI‘}

还可以弹出的方式来删除集合中的一个元素,它会返回弹出的元素。语法格式如下:
set.pop()

>>> set2
{1, 3, 4, 5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}
>>> set2.pop()
1
>>> set2
{3, 4, 5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}
>>> set2.pop()
3
>>> set2.pop()
4

3.移除元素:set.remove(x)

向已经存在的集合中添加元素。如果元素不存在,则会发生错误。

>>> set1 = {"ALI", "RBQ", "TB"}
>>> set1
{‘RBQ‘, ‘ALI‘, ‘TB‘}
>>> set1.remove("TB")
>>> set1
{‘RBQ‘, ‘ALI‘}
>>> set1.remove("TTTT")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: ‘TTTT‘

4.成员操作符:in和not in

>>> set2
{5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}
>>> ‘RBQ‘ in set2
True
>>> 2 not in set2
True
>>> 6 not in set2
False

5.集合运算:

    并集;s1.union(s2) 或者 s1 | s2
    交集:s1.intersection(s2) 或者 s1 | s2
    差集:s1.difference(s2) 或者 s1 - s2
         s2.denfference(s1) 或者 s2 - s1
    对差等分(并集-交集):s1.symmetric_difference(s2) 或者 s1 ^ s2

6.两个集合函数

(1).求集合长度:len(set)

>>> set2
{5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}
>>> len(set2)
8

(2).清空集合:set.clear()

>>> set2
{5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}
>>> set2.clear()
>>> set2
set()

原文地址:http://blog.51cto.com/13885935/2161676

时间: 2024-08-02 00:49:28

Python学习—元组与集合的相关文章

【Python学习笔记】集合

概述 集合的一般操作 内建函数进行标准操作集合 数学运算符进行标准操作集合 集合的应用 概述 python的集合(set)是无序不重复元素集,是一种容器.集合(set)中的元素必须是不可变对象,即可用被哈希,这和字典的键是一样的,所以列表.字典等可变对象不可作为set的元素.集合不提供索引或切片操作,即对象不存在相关的键值.python中的集合分为两种:set是可变的集合,frozenset是不可变的集合. 集合的创建使用关键字set或frozenset, 参数可以是列表.字符串或元组等不可变对

【Python学习之四】集合类型

环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.字符串:字符串实际上就是字符的数组1.切片是指对操作的对象截取其中一部分的操作.字符串.列表.元组都支持切片操作.(1)python中从左侧开始,下标 0 开始:从右侧,下标从-1开始:(2)切片的语法:[起始:结束:步长],选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)

Python学习笔记-Day3-set集合操作

set集合,是一个无序且不重复的元素集合.定义方式类似字典使用{}创建 目前我们学过的数据类型: 1.字符串(str),2.整型(int),3.浮点型(float),4,列表(list) 5.元组(tuple),6.字典(dict),7.集合(set),8.布尔型(bool) 1.集合创建 2.集合操作   2.1 set.add 添加元素 往set中添加一个元素只有set中不存在该元素时,才会加入该元素   2.2 set.clear 清空所有元素 从set中移除所有元素   2.3 set.

Python列表 元组 字典 集合

元组 Python中的元组(Tuple)类似于Java中的数组,一旦创建了一个 tuple,就不能以任何方式改变它.这点与Python中的字符串类似,所以我们说元组和字符串都是不可变的序列.元组也支持索引和分片操作. 定义一个元组使用一对小(圆)括号” ( ) “. #定义一个元组 tuple1 = (1, 2, '3', 4, '5') # 定义了一个元组之后就无法再添加或修改元组中的元素 print tuple1[0] # 元组的元素都有确定的顺序.元组的索引也是以0为基点的 print t

Python学习笔记7—集合

set 拥有类似 dict 的特点:可以用{}花括号来定义:其中的元素没有序列,也就是是非序列类型的数据;而且,set 中的元素不可重复,这就类似 dict 的键. >>> s1 = set("Keven") >>> s1 set(['K', 'n', 'e', 'v']) >>> type(s1) <type 'set'>>>> s3 = set(["name","age

python学习笔记(集合的使用、文件操作、字符编码与转码、函数)

集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知识的解决思路:先设置空列表,然后使用for寻获,把需要去重的列表的第一个数据放到新列表中,然后依次取出第二个数据,把第二个数据和第一个数据作比较,如果不一样,则存入新列表中:以此类推,每取一次都要和新列表中的数据作对比,不一样的则添加入新列表中. 2. 关系测试 比如有学员同时报了python班和l

python学习--元组

元组的基本操作:1.创建一个元组: tuple=(1,26); tuple1=("15","sy"); 创建一个空元组: tuple=(); 元组中只包含一个元素时,需要在元素后面添加逗号来消除歧义: tuple=(50,) 2.访问元组: tup1 = ('physics', 'chemistry', 1997, 2000); tup2 = (1, 2, 3, 4, 5, 6, 7 ); print "tup1[0]: ", tup1[0] p

python学习(30)_集合_2

遍历集合 In 遍历 >>> s1 {4, 'a', 'x', 'c', 'b'} >>> for value in s1: ... print(value) ... 4 a x c b 使用enumerate进行遍历 >>> for index,value in enumerate(s1): ... print(index,value) ... 0 4 1 a 2 x 3 c 4 b 集合转换成字符串 >>> s1 {4, 'a',

python学习—元组和列表

序列类型 =====================序列类型介绍 1.可以通过下标取值 2.可以进行切片操作:获取数据中的某一段 [起始位置 :终止位置]  --------左闭右开 元组和列表里面可以存放任意类型的数据:字符串.布尔值.列表.数值 元组 tuple类型 ('python' , True, 666,['python' , 'hello' , 666] ) 列表  list类型 ['python' , True, 666,['python' , 'hello' , 666] ] 原