精华内容
下载资源
问答
  • Python列表和元组的详细区别

    万次阅读 多人点赞 2018-06-06 20:40:06
    Python列表和元组的详细区别 一、列表和元组的区别 二、列表(List) 三、元组(Tuple) Python列表和元组的详细区别 一、列表和元组的区别 列表是动态数组,它们不可变且可以重设长度(改变其内部元素...

    Python列表和元组的详细区别

    一、列表和元组的区别

    1. 列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)。
    2. 元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变。
    3. 元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。

    这些区别结实率两者在设计哲学上的不同:

    • 列表可被用于保存多个互相独立对象的数据集合
    • 元组用于描述一个不会改不安的事务的多个属性

    二、列表(List)

    列表一旦创建了我们就可以根据自己的需要随意改变它的内容:

    >>> l = [1, 2, 3, 4, 5, 6]
    >>> l[0] = l[2] * l[3]
    >>> l
    [12, 2, 3, 4, 5, 6]
    

    另外我们可以给列边添加新的数据来增加其大小:

    >>> len(l)
    6
    >>> l.append(7)
    >>> l
    [12, 2, 3, 4, 5, 6, 7]
    >>> len(l)
    7
    

    这是因为动态数组支持resize操作,可以增加数组的容量。当一个大小为N的列表第一次需要添加数据时,Python会创建一个新的列表,足够放原来的N个元素以及额外添加的元素。不过,实际分配的并不是N+1个元素,而是M个元素,M > N, 这是为了给未来的添加预留空间。然后旧列表的数据被复制到新列表中,旧列表则会被销毁。从设计理念上来说,第一次添加可能是后续多次添加的开始,通过预留空间的做法,我们就可以减少这一分配空间的操作次数以及内存复制的次数。这点非常重要,因为内存复制可能非常的昂贵,特别是当列表大小开始增长以后。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GdQpXs7R-1599024560319)(./image/列表的添加操作.jpg)]

    三、元组(Tuple)

    元组是固定且不可改变的。这意味着一旦元组被创建,和列表不同,它的内容无法被修改或它的大小也无法被改变。

    >>> t = (1, 2, 3, 4)
    >>> t[0] = 5
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    

    虽然它们不支持改变大小,但是我们可以将两个元组合并成一个新元组。这一操作类似列表的resize操作,但我们不需要为新生的元组分配任何额外的空间:

    >>> t1 = (1, 2, 3, 4)
    >>> t2 = (5, 6, 7, 8)
    >>> t1 + t2
    (1, 2, 3, 4, 5, 6, 7, 8)
    

    如果我们将其与列表的append操作比较,我们会看到它的复杂度是O(n)而不是列表的O(1)。这是因为对元组每添加一个新元素都会有分配和复制操作,而不是像列表那样仅在额外的空间耗尽时发生。所以元组并没有提供一个类似append的自增操作,任意两个元组相加始终返回一个新分配的元组。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nIsaGxH8-1599024560321)(./image/元组的合并操作.jpg)]

    该网站为Python Tutor,一个能够对python运行内存可视化的网站,非常适合初学者研究,在运行过程中内存发生了什么。

    元组的静态特性的另一个好处体现在一些会在Python后台发生的事情:资源缓存。

    Python是一门垃圾收集语言,这意味着当一个变量不再被使用时,Python会将该变量使用的内存释放回操作系统,以供其他程序(变量)使用。然而,对于长度为1~20的元组,即使它们不在被使用,它们的空间也不会立刻还给系统,而是留待未来使用。这意味着当未来需要一个同样大小的新的元组时,我们不再需要向操作系统申请一块内存来存放数据,因为我们已经有了预留的空间。

    这看上去可能是个细微的好处,但是实际上是元组一个很神奇的地方:它们可以被轻松快速地创建,因为它们可以避免跟操作系统频繁的打交道,而后者会花很长的时间。

    下面举个例子会非常直观的说明问题

    In [1]: %timeit l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    93.7 ns ± 3.33 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
    
    In [2]: %timeit t = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    18.5 ns ± 1.19 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
    

    上面的示例中显示了初始化一个列表比初始化一个元组慢了5.1倍——如果这是在一个循环中,这点差别会很快的累加起来。

    展开全文
  • Python列表推导式

    万次阅读 多人点赞 2019-05-18 00:51:24
    Python列表推导式 列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表. 一、range()函数 python的range()函数可用来创建一个整数列表,一般用在 for 循环中. range()语法:...

    Python列表推导式

    列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表.

    一、range()函数

    python的range()函数可用来创建一个整数列表,一般用在 for 循环中.

    range()语法:range(start, stop[, step])

    start: 计数从start开始,默认是从0开始(闭区间),如:range(5)等价于range(0,5).

    stop: 计数到stop结束,但不包括stop(开区间).如:range(0,5)是[0, 1, 2, 3, 4],不包含5.

    step:步长,相邻两个值的差值,默认为1.如:range(0,5)相当于range(0, 5, 1).

    为什么要在列表推导式前讲range(),因为列表推导式是通过一个可迭代对象来生成列表的,range()可以说是列表推导式中最常用的可迭代对象了.对列表推导式来说,range()是其中的精髓之一.没有range(),列表推导式的可读性和简洁性将会大打折扣.

    二、列表推导式

    列表推导式(list comprehension)是指循环创建列表.

    for循环有非常广的应用场景,也可以用来创建一个列表,而列表推导式就相当于for循环创建列表的简化版.

    # for循环
    list_a = list()
    for a in range(5):
        list_a.append(a)
    print(list_a)
    # 列表推导式
    list_b = [b for b in range(5)]
    print(list_b)

    上面分别是用for循环和列表推导式创建列表的代码,list_a和list_b的结果是一样的,都是[0, 1, 2, 3, 4].

    下面来看复杂点的列表推导式:

    # in后面跟其他可迭代对象,如字符串
    list_c = [7 * c for c in "python"]
    print(list_c)
    
    # 带if条件语句的列表推导式
    list_d = [d for d in range(6) if d % 2 != 0]
    print(list_d)
    
    # 多个for循环
    list_e = [(e, f * f) for e in range(3) for f in range(5, 15, 5)]
    print(list_e)
    
    # 嵌套列表推导式,多个并列条件
    list_g = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g != 0]
    print(list_g)

    运行结果:

    ['ppppppp', 'yyyyyyy', 'ttttttt', 'hhhhhhh', 'ooooooo', 'nnnnnnn']
    [1, 3, 5]
    [(0, 25), (0, 100), (1, 25), (1, 100), (2, 25), (2, 100)]
    [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20]]

    代码解释:

    1.列表推导式会遍历后面的可迭代对象,然后按照for前的表达式进行运算,生成最终的列表.

    2.如果有if条件语句,for遍历后紧跟着进行条件判断.

    3.如果有多个for循环,则最终的数据数量为多个for循环的笛卡尔积.

    4.可以进行嵌套的列表推导,与嵌套for循环的原理相同.

    三、代码可读性

    对于不熟悉列表推导式的人来说,可以使用for循环来实现相同的功能,但是需要好几行代码,而列表推导式只需要一行代码.

    很多人会说代码简洁了但可读性降低了,其实不然,当我们对列表推导式熟悉(自己写几次就熟悉了),代码的功能一眼就能轻松地看出来,但是for循环代码基本不可能一眼看完.尤其当创建列表的for循环嵌套在业务逻辑的其他for循环里时,恰恰是使用列表推导式的可读性最高.

    同时,在Python3中列表推导式有自己的局部作用域,就像函数似的.表达式内部的变量和赋值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们.

    也就是说,列表推导不会有变量泄漏的问题,在列表推导中的赋值操作不可能会影响到列表推导上下文中的同名变量.

    当然,也不是所有场景都推荐使用列表推导式.比如说:如果列表推导的代码超过了两行,就要考虑改成用for循环了.超过了两行的列表推导式就真的没有可读性了.通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短.

    四、字典推导式

    自Python2.7以来,列表推导概念就移植到了字典上,从而有了字典推导(后面还会看到集合推导).

    如果列表推导的概念已经为你所熟知,接受字典推导并不难.直接看代码吧:

    # 因为key是唯一的,所以最后value都是1
    dict_a = {key: value for key in 'python' for value in range(2)}
    print(dict_a)
    
    # 可以根据键来构造值
    dict_b = {key: key * key for key in range(6)}
    print(dict_b)
    
    # 遍历一个有键值关系的可迭代对象
    list_phone = [('HUAWEI', '华为'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
    dict_c = {key: value for key, value in list_phone}
    print(dict_c)

    运行结果:

    {'p': 1, 'y': 1, 't': 1, 'h': 1, 'o': 1, 'n': 1}
    {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
    {'HUAWEI': '华为', 'MI': '小米', 'OPPO': 'OPPO', 'VIVO': 'VIVO'}

    五、集合推导式

    Python2.7不仅带来了字典推导式,还带来了集合推导式.

    同样的,我们直接看代码,这样可以直观的看到集合推导式.

    # 遍历一个可迭代对象生成集合
    set_a = {value for value in '有人云淡风轻,有人负重前行'}
    print(set_a)
    

    运行结果:

    {'负', '有', '人', '轻', '前', '云', '重', ',', '淡', '风', '行'}

    集合是无序且不重复的,所以会自动去掉重复的元素,并且每次运行显示的顺序不一样.

    从上面的代码中可以总结:

    集合推导式就是将列表推导式的[]换成{},字典推导式就是推导出两个值并构建成键值对的样子.

    另外,不管是字典推导式还是集合推导式,后面都可以像列表推导式一样接if条件语句,嵌套循环等,具体可以根据您自己的需求来使用.

     

     

    展开全文
  • Python 列表表达式

    千次阅读 2018-08-15 14:25:57
    Python 列表表达式 [表达式 for 变量 in 列表] or [表达式 for 变量 in 列表 if 条件] result = [li+3 for li in rang(4)] print(result) &gt;&gt;&gt; [3, 4, 5, 6] 就是把得到的每一个 li 值 都放...

    Python 列表表达式

    [表达式 for 变量 in 列表] or [表达式 for 变量 in 列表 if 条件]

    result = [li+3 for li in range(4)]
    print(result)
    
    >>> [3, 4, 5, 6]
    

    就是把得到的每一个 li 值 都放到 for 前面的表达式中计算 ,然后生成一个列表。

    展开全文
  • python 列表取值

    千次阅读 2019-12-04 20:09:06
    # python 列表取值 list = ['张三','李四','王五','赵六','钱七','孙八'] print(list) zhaoliu = list[3] print(zhaoliu) zhaoliu =list[-3] print(zhaoliu) # 范围取值:列表变量 = 原来表变量[起始索引:结束索引]...
    # python 列表取值
    list = ['张三','李四','王五','赵六','钱七','孙八']
    print(list)
    zhaoliu = list[3]
    print(zhaoliu)
    zhaoliu =list[-3]
    print(zhaoliu)
    
    # 范围取值:列表变量 = 原来表变量[起始索引:结束索引]
    # 在python中列表范围取值是"左闭右开"包含左边,不包含右边
    list1 = list[ 1 : 4]
    print(list1)
    
    # 列表的index函数用于获取指定元素的索引值
    zhaoliu_index = list.index('赵六')#返回第一次出现的索引
    print(zhaoliu_index)
    

    运行结果:
    在这里插入图片描述

    展开全文
  • python 列表过滤方法 条件表达式

    万次阅读 热门讨论 2021-01-07 18:49:09
    例如在一个列表里找出所有奇数可以这样写: a = [1,2,3,4,5,6,7,8] print(list(filter(lambda x: x%2 , a))) >>> ================================ RESTART ================================ >&
  • Python 列表与集合

    千次阅读 2019-07-13 10:56:40
    Python 列表与集合 列表方法 sort() :按字母顺序排列 sort(reverse=True): 按字母顺序反向排列 reverse(): 反转列表排列 列表排序方法将直接改变原列表排列 L1.sort() 列表函数 sorted() sorted...
  • python列表查找值Hi Folks! In this article, we will have a look at the various ways to find the average of a list in a Python List. 嗨伙计! 在本文中,我们将介绍在Python List中查找列表平均值的各种方法 ...
  • python列表append()函数

    万次阅读 多人点赞 2018-10-15 20:49:33
    python列表语法大全链接   append()函数 描述:在列表ls最后(末尾)添加一个元素object 语法:ls.append(object) -&gt; None 无返回值 object —— 要添加的元素。可以添加 列表,字典,元组,集合,字符串...
  • python列表list去重

    千次阅读 2018-09-26 12:23:07
    python列表list去重代码 a = list() [a.append(i) for i in counts if a.count(i)==0]  
  • python列表过滤

    千次阅读 2014-11-11 22:15:22
    python列表过滤 写代码时会遇到这样的需求:从指定列表中删除不符合要求的元素。这时直观的做法就是遍历整个列表,遇到不符合要求的就删除。但是下面这种写法是错的: for item in list: if not_wanted(item): ...
  • python 列表乘一个数字

    万次阅读 2019-01-26 18:04:27
    python 列表乘一个数字 在python中, 如果用一个列表list1乘一个数字n 会得到一个新的列表list2, 这个列表的元素是list1的元素重复n次, 例如 list1 = [0] list2 = list1 * 5 # list2 = [0, 0, 0, 0, 0] 但如果...
  • Python列表/字典操作 时间复杂度

    千次阅读 2019-05-18 12:36:26
    文章目录Python 列表/字典操作时间复杂度#1 环境#2 List#3 Dict Python 列表/字典操作时间复杂度 #1 环境 Python3.7.3 #2 List 操作 操作说明 时间复杂度 index(value) 查找list某个元素的索引 O(1) a = ...
  • python列表乘法使用注意

    千次阅读 2019-05-13 19:03:10
    一句话,对Python列表使用乘法,对于不可变对象(如数字、字符串)而言是复制值,但对可变对象(如列表、字典)而言则是复制引用,因此对于包含可变对象的列表切莫使用列表乘法,可使用列表生成式代替。简单例子见下...
  • 如何在python列表中查找某个元素的索引方法二:利用enumerate函数。python怎么把一个列表中的特定子元素(元组)提取出eg: list1 =[(小明,小明),(小红,小红),(小天,小天)]list2=[小list2 = [i[0] for i in list1]...
  • Python列表(“数组”)操作

    万次阅读 多人点赞 2018-09-29 16:39:54
    Python列表:一个“打了激素的数组” 1、任务简介 首先,我们需要明确的一点就是Python是没有数组这一概念的,也正是基于这一特点我才打算撰写这篇博客,但是Python中有一种比数组还要厉害的东西——列表,它的...
  • Python列表基本增减操作

    千次阅读 2017-05-22 12:16:22
    Python列表基本增减操作
  • Python列表深度拷贝

    千次阅读 2018-06-03 22:01:19
    Python列表深度拷贝可保证拷贝后列表忠诚度始终如一,而浅度列表则有向蒲志高看齐的冲动!如下有公司人员构成,中途变动后情况:import copylist1 = ["刘德华","张学友","郭富城",['...
  • Python列表查重、获取列表中的重复元素、列表去重 #!/usr/bin/env python #!-*-coding:utf-8 -*- def run(lit): # 判断lit中是否有重复的元素 if [lit.count(x) for x in lit if lit.count(x) > 1]: lit1 = ...
  • python列表和Numpy数组的区别

    千次阅读 2019-03-09 23:22:52
    python列表和Numpy数组的区别 array的创建 元素访问 array的一维数组的访问方式 array的二维数组的访问方式 参考链接 python列表和Numpy数组的区别 1二者都可以用于处理多维数组。 Numpy中的ndarray对象用于...
  • python列表中随机选择Python random module provides an inbuilt method choice() has an ability to select a random item from the list and other sequences. Using the choice() method, either a single random...
  • Python杂谈 | (1)Python列表合并、去重和排序

    万次阅读 多人点赞 2018-10-13 14:10:27
    目录   一.列表合并--append() 二.列表合并--extend() ...2.列表对象的append()可以将另一个列表追加到当前列表中,作为当前列表的一个元素。 二.列表合并--extend() 与append()不同,e...
  • python 列表 分割 list.split( )

    万次阅读 2020-03-08 21:26:55
    python 列表 分割 list.split( ) list.split() 就是以字符串或列表里某个字符把字符串或列表进行分割成新的字符串或列表。 list.split(“,”) 这就是以“,”来分割,如果原来字符串或列表里没有“,” 则无法...
  • python列表平均值函数Mathematics and programming go hand in hand. If you are a programmer, at some point you will have to use mathematics. 数学和程序设计齐头并进。 如果您是程序员,则有时必须使用数学。 ...
  • python列表 数组 字典

    千次阅读 2016-06-15 00:07:10
    创建列表 ...Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_start = sample_list[0] end_value = sample_list[-1] 删除列表的第一个值 del sample_list[0]
  • Python列表切片用法示例

    万次阅读 多人点赞 2017-04-21 09:59:42
    本文实例讲述了Python列表切片用法。分享给大家供大家参考,具体如下: Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。  格式:【start:end:step】  start:起始索引,从0开始,-1...
  • python列表的性能

    万次阅读 2020-08-11 11:47:28
    引自书中:python 的设计者在实现列表数据结构的时候有很多选择。每一个这种选择都可能影响列表操作的性能。为了帮助他们做出正确的选择,他们查看了最常使用列表数据结构的方式,并且优化了实现,以便使得最常见的...
  • Python列表、Numpy数组与矩阵的区别

    万次阅读 多人点赞 2018-04-03 17:10:22
    参考博客:...Python列表和Numpy数组的区别: Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。使用Python列表可以存储一维数组,通过列表的...
  • 利用python列表实现单链表

    千次阅读 2014-10-31 10:42:46
    利用python列表实现单链表
  • python列表count()函数

    千次阅读 2018-10-22 20:12:48
    python列表语法大全链接 count()函数描述:统计列表ls中value元素出现的次数 语法:ls.count(value) -&gt; integer 返回一个整数 value —— 要统计的value元素。 程序示例: ls = [1,2,3,5,4,5,5,5,5,&...
  • Python列表解析

    万次阅读 2018-07-31 17:22:43
    Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一个函数,从而将一个 list 映射为另一个 list。 列表解析,又叫列表推导式( list comprehension) 列表解析...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 179,144
精华内容 71,657
关键字:

python列表

python 订阅