Python学习—元组与集合

发布时间:2019-09-19 08:02:35编辑:auto阅读(1782)

    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个元素:
    Python学习—元组与集合
    当我们把list的元素'A'和'B'修改为'X'和'Y'后,tuple变为:
    Python学习—元组与集合
    表面上看,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()

关键字

上一篇: Python线程锁

下一篇: python pip 修改源