<sup id="sjju3"><noscript id="sjju3"></noscript></sup>
    <big id="sjju3"></big>

  • <blockquote id="sjju3"></blockquote>
    <blockquote id="sjju3"></blockquote>

      <td id="sjju3"></td>

      <big id="sjju3"></big>
        <code id="sjju3"><strong id="sjju3"><dl id="sjju3"></dl></strong></code>
      1. Python基本数据结构与用法详解【列表、元组、集合、字典】

         更新时间:2019年03月23日 10:46:17   作者:流年醉影   我要评论

        这篇文章主要介绍了Python基本数据结构与用法,结合实例形式分析了Python基本数据结构中的列表、元组、集合、字典相关概念、使用方法及推导式、遍历等相关使用技巧,需要的朋友可以参考下

        本文实例讲述了Python基本数据结构与用法。分享给大家供大家参考,具体如下:

        列表

        Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。以下是 Python 中列表的方法:

        下面示例演示了列表的大部分方法:

        >>> a = [66.25, 333, 333, 1, 1234.5]
        >>> print(a.count(333), a.count(66.25), a.count('x'))
        2 1 0
        >>> a.insert(2, -1)
        >>> a.append(333)
        >>> a
        [66.25, 333, -1, 333, 1, 1234.5, 333]
        >>> a.index(333)
        1
        >>> a.remove(333)
        >>> a
        [66.25, -1, 333, 1, 1234.5, 333]
        >>> a.reverse()
        >>> a
        [333, 1234.5, 1, 333, -1, 66.25]
        >>> a.sort()
        >>> a
        [-1, 1, 66.25, 333, 333, 1234.5]
        
        

        注意:类似 insert, remove 或 sort 等修改列表的方法没有返回值。

        将列表当做堆栈使用

        列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出?#30784;?#20363;如:

        >>> stack = [3, 4, 5]
        >>> stack.append(6)
        >>> stack.append(7)
        >>> stack
        [3, 4, 5, 6, 7]
        >>> stack.pop()
        7
        >>> stack [3, 4, 5, 6]
        >>> stack.pop()
        6
        >>> stack.pop()
        5
        >>> stack
        [3, 4]
        
        

        将列表当作队列使用

        也可以把列表当做队列用,只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。

        >>> from collections import deque
        >>> queue = deque(["Eric", "John", "Michael"])
        >>> queue.append("Terry")                       # Terry arrives
        >>> queue.append("Graham")                    # Graham arrives
        >>> queue.popleft()                            # The first to arrive now leaves
        'Eric'
        >>> queue.popleft()                            # The second to arrive now leaves
        'John'
        >>> queue                               # Remaining queue in order of arrival
        deque(['Michael', 'Terry', 'Graham'])
        
        

        列表推导式

        列表推导式提供了?#26377;?#21015;创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

        每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

        这里我们将列表中每个数值乘三,获得一个新的列表:

        >>> vec = [2, 4, 6]
        >>> [3*x for x in vec]
        [6, 12, 18]
        
        

        现在我们玩一点小花样:

        >>> [[x, x**2] for x in vec]
        [[2, 4], [4, 16], [6, 36]]
        
        

        这里我们对序列里每一个元素逐个调用某方法:

        >>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
        >>> [weapon.strip() for weapon in freshfruit]
        ['banana', 'loganberry', 'passion fruit']
        
        

        我们可以用 if 子句作为过滤器:

        >>> [3*x for x in vec if x > 3]
        [12, 18]
        >>> [3*x for x in vec if x < 2]
        []
        
        

        以下是一些关于循环?#25512;?#23427;技巧的演示:

        >>> vec1 = [2, 4, 6]
        >>> vec2 = [4, 3, -9]
        >>> [x*y for x in vec1 for y in vec2]
        [8, 6, -18, 16, 12, -36, 24, 18, -54]
        >>> [x+y for x in vec1 for y in vec2]
        [6, 5, -7, 8, 7, -5, 10, 9, -3]
        >>> [vec1[i]*vec2[i] for i in range(len(vec1))]
        [8, 12, -54]
        
        

        列表推导式可以使用复杂表达式或嵌套函数:

        >>> [str(round(355/113, i)) for i in range(1, 6)]
        ['3.1', '3.14', '3.142', '3.1416', '3.14159']
        
        

        嵌套列表解析

        Python的列表还可以嵌套。以下实例展示了3X4的矩阵列表:

        >>> matrix = [
        ... [1, 2, 3, 4],
        ... [5, 6, 7, 8],
        ... [9, 10, 11, 12],
        ... ]
        
        

        以下实例将3X4的矩阵列表转换为4X3列表:

        >>> [[row[i] for row in matrix] for i in range(4)]
        [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
        
        

        以下实例也可以使用以下方法来实现:

        >>> transposed = []
        >>> for i in range(4):
        ...   transposed.append([row[i] for row in matrix])
        ...
        >>> transposed
        [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
        
        

        另外一种实现方法:

        >>> transposed = []
        >>> for i in range(4):
         ...   # the following 3 lines implement the nested listcomp
        ...   transposed_row = []
        ...   for row in matrix: ... transposed_row.append(row[i])
        ...     transposed.append(transposed_row)
        ...
        >>> transposed
        [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
        
        

        del 语句

        使用 del 语句可以从一个列表中依索引而不是值来?#22659;?#19968;个元素。这与使用 pop() 返回一个值不同。可以用 del 语句从列表中?#22659;?#19968;个切割,或清空整个列表(我们以前介绍的方法是给?#20204;?#21106;赋一个空列表)。例如:

        >>> a = [-1, 1, 66.25, 333, 333, 1234.5]
        >>> del a[0]
        >>> a
        [1, 66.25, 333, 333, 1234.5]
        >>> del a[2:4]
        >>> a
        [1, 66.25, 1234.5]
        >>> del a[:]
        >>> a
        []
        
        

        也可以用 del ?#22659;?#23454;体变量:

        >>> del a
        
        

        元组和序列

        元组由若干逗号分隔的值组成,例如:

        >>> t = 12345, 54321, 'hello!'
        >>> t[0]
        12345
        >>> t
        (12345, 54321, 'hello!')
        >>> # Tuples may be nested:
        ... u = t, (1, 2, 3, 4, 5)
        >>> u
        ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
        
        

        如你所见,元组在输出时总是有括号的,以便于正确表达嵌套结构。在输入时可能有或没有括号, 不过括号通常是必须的(如果元组是更大的表达式的一部分)。

        集合

        集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。

        可以用大括号({})创建集合。注意:如果要创建一个空集合,你必须用 set() 而不是 {} ;后者创建一个空的字典。

        以下是一个简单的演示:

        >>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
        >>> print(basket) # show that duplicates have been removed
        {'orange', 'banana', 'pear', 'apple'}
        >>> 'orange' in basket # fast membership testing
        True
        >>> 'crabgrass' in basket
        False
        >>> # Demonstrate set operations on unique letters from two words
        ...
        >>> a = set('abracadabra')
        >>> b = set('alacazam')
        >>> a            # unique letters in a
        {'a', 'r', 'b', 'c', 'd'}
        >>> a - b          # letters in a but not in b
        {'r', 'd', 'b'}
        >>> a | b          # letters in either a or b
        {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
        >>> a & b             # letters in both a and b
        {'a', 'c'}
        >>> a ^ b             # letters in a or b but not both
        {'r', 'd', 'b', 'm', 'z', 'l'}
        >>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
        >>> print(basket)             # show that duplicates have been removed
        {'orange', 'banana', 'pear', 'apple'}
        >>> 'orange' in basket # fast membership testing
        True
        >>> 'crabgrass' in basket
        False
        >>> # Demonstrate set operations on unique letters from two words
        ...
        >>> a = set('abracadabra')
        >>> b = set('alacazam')
        >>> a               # unique letters in a
         {'a', 'r', 'b', 'c', 'd'}
        >>> a - b                 # letters in a but not in b
        {'r', 'd', 'b'}
        >>> a | b               # letters in either a or b
        {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
        >>> a & b             # letters in both a and b
        {'a', 'c'}
        >>> a ^ b              # letters in a or b but not both
        {'r', 'd', 'b', 'm', 'z', 'l'}
        
        

        字典

        另一个非常有用的 Python 内建数据类型是字典。

        序列是以连续的整数为索引,与此不同的是,字典以关键字为索引,关键字可以是?#25105;?#19981;可变类型,通常用字符串或数值。

        理解字典的最佳方式是把它看做无序的键=>值对集合。在同一个字典之内,关键字必须是互不相同。

        一?#28304;?#25324;号创建一个空的字典:{}

        这是一个字典运用的简单例子:

        >>> tel = {'jack': 4098, 'sape': 4139}
        >>> tel['guido'] = 4127
        >>> tel
        {'sape': 4139, 'guido': 4127, 'jack': 4098}
        >>> tel['jack']
        4098
        >>> del tel['sape']
        >>> tel['irv'] = 4127
        >>> tel
        {'guido': 4127, 'irv': 4127, 'jack': 4098}
        >>> list(tel.keys())
        ['irv', 'guido', 'jack']
        >>> sorted(tel.keys())
         ['guido', 'irv', 'jack']
        >>> 'guido' in tel
        True
        >>> 'jack' not in tel
        False
        
        

        构造函数 dict() 直接从键值对元组列表中构建字典。如果有固定的模式,列表推导式指定特定的键值对:

        >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
        {'sape': 4139, 'jack': 4098, 'guido': 4127}
        
        

        此外,字典推导可以用来创建?#25105;?#38190;和值的表达式词典:

        >>> {x: x**2 for x in (2, 4, 6)}
        {2: 4, 4: 16, 6: 36}
        
        

        如果关键字只是简单的字符串,使用关键字参数指定键值对有时候更方便:

        >>> dict(sape=4139, guido=4127, jack=4098)
        {'sape': 4139, 'jack': 4098, 'guido': 4127}
        
        

        遍历技巧

        在字典中遍历时,关键字?#25237;?#24212;的值可以使用 items() 方法同时解读出来:

        >>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
        >>> for k, v in knights.items():
        ...   print(k, v)
        ...
        gallahad the pure
        robin the brave
        
        

        在序列中遍历时,索引位置?#25237;?#24212;值可以使用 enumerate() 函数同时得到:

        >>> for i, v in enumerate(['tic', 'tac', 'toe']):
        ...   print(i, v)
        ...
        0 tic
        1 tac
        2 toe
        
        

        同时遍历两个或更多的序列,可以使用 zip() 组合:

        >>> questions = ['name', 'quest', 'favorite color']
        >>> answers = ['lancelot', 'the holy grail', 'blue']
        >>> for q, a in zip(questions, answers):
        ...   print('What is your {0}? It is {1}.'.format(q, a))
        ...
        What is your name? It is lancelot.
        What is your quest? It is the holy grail.
        What is your favorite color? It is blue.
        
        

        要反向遍历一个序列,首先指定这个序列,然后调用 reversesd() 函数:

        >>> for i in reversed(range(1, 10, 2)):
        ... print(i)
        ...
        9
        7
        5
        3
        1
        
        

        要?#27492;?#24207;遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修?#33041;?#20540;:

        >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
        >>> for f in sorted(set(basket)):
        ...   print(f)
        ...
        apple
        banana
        orange
        pear
        
        

        更多关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python列表(list)操作技巧总结》、《Python字典操作技巧汇总》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

        希望本文所述?#28304;?#23478;Python程序设计有所帮助。

        相关文章

        • python GUI实例学习

          python GUI实例学习

          给大家介绍一下python GUI实例学习的心得以及实现的方式,希望能帮助到你。
          2017-11-11
        • Python常见字典内建函数用法示例

          Python常见字典内建函数用法示例

          这篇文章主要介绍了Python常见字典内建函数用法,结合具体实例形式分析了Python字典内建函数实现针对字典的长?#21462;ash运算、键值对遍历、获取、计算等相关操作技巧,需要的朋友可以参考下
          2018-05-05
        • 使用Python的Tornado框架实现一个一对一聊天的程序

          使用Python的Tornado框架实现一个一对一聊天的程序

          这篇文章主要介绍了使用Python的Tornado框架实现一个一对一聊天的程序,程序基于WebSocket,需要的朋友可以参考下
          2015-04-04
        • Python 实现购物商城,含有用户入口和商家入口的示例

          Python 实现购物商城,含有用户入口和商家入口的示例

          下面小编就为大家带来一篇Python 实现购物商城,含有用户入口和商家入口的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
          2017-09-09
        • Python实现的简单发送邮件脚本分享

          Python实现的简单发送邮件脚本分享

          这篇文章主要介绍了Python实现的简单发送邮件脚本分享,本文使用smtplib模块实现邮件的发送,需要的朋友可以参考下
          2014-11-11
        • 编写Python脚本批量下载DesktopNexus壁纸的教程

          编写Python脚本批量下载DesktopNexus壁纸的教程

          这篇文章主要介绍了编写Python脚本批量下载DesktopNexus壁纸的教程,相较于普通的爬虫抓取,本文的下载壁纸教程还包括了设置所要下载的分辨?#23454;?#21151;能的实现,需要的朋友可以参考下
          2015-05-05
        • Python Series从0开始索引的方法

          Python Series从0开始索引的方法

          今天小编就为大家分享一篇Python Series从0开始索引的方法,具有很好的参?#25216;?#20540;,希望?#28304;?#23478;有所帮助。一起跟随小编过来看看吧
          2018-11-11
        • 便捷提取python导入包的属性方法

          便捷提取python导入包的属性方法

          今天小编就为大家分享一篇便捷提取python导入包的属性方法,具有很好的参?#25216;?#20540;,希望?#28304;?#23478;有所帮助。一起跟随小编过来看看吧
          2018-10-10
        • 在python中使用正则表达式查找可嵌套字符串组

          在python中使用正则表达式查找可嵌套字符串组

          这篇文章主要介绍了在python中使用正则表达式查找可嵌套字符串组的相关资料,需要的朋友可以参考下
          2017-10-10
        • Python numpy中矩阵的基本用法汇总

          Python numpy中矩阵的基本用法汇总

          这篇文章主要给大家介绍了关于Python numpy中矩阵的基本用法的相关资?#24076;?#25991;中通过示例代码介绍的非常详细,?#28304;?#23478;的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学?#25226;?#20064;吧
          2019-02-02

        最新评论

        2018白小姐一肖中特马
        <sup id="sjju3"><noscript id="sjju3"></noscript></sup>
        <big id="sjju3"></big>

      2. <blockquote id="sjju3"></blockquote>
        <blockquote id="sjju3"></blockquote>

          <td id="sjju3"></td>

          <big id="sjju3"></big>
            <code id="sjju3"><strong id="sjju3"><dl id="sjju3"></dl></strong></code>
          1. <sup id="sjju3"><noscript id="sjju3"></noscript></sup>
            <big id="sjju3"></big>

          2. <blockquote id="sjju3"></blockquote>
            <blockquote id="sjju3"></blockquote>

              <td id="sjju3"></td>

              <big id="sjju3"></big>
                <code id="sjju3"><strong id="sjju3"><dl id="sjju3"></dl></strong></code>