精华内容
下载资源
问答
  • 列表推导与字典推导,滚雪球学 Python
    千次阅读 多人点赞
    2021-03-03 21:50:58

    橡皮擦,一个逗趣的互联网高级网虫,新的系列,让我们一起 Be More Pythonic

    四、列表推导式与字典推导式

    在 Python 中推导式是一种非常 Pythonic 的知识,本篇博客将为你详细解答列表推导式与字典推导式相关的技术知识。

    4.1 列表推导式

    列表推导式可以利用列表,元组,字典,集合等数据类型,快速的生成一个特定需要的列表。
    语法格式如下:

    [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
    

    if 条件表达式 非必选,学完列表推导式之后,你可以发现它就是 for 循环的一个变种语句,例如咱们现有一个需求是将一个列表中的所有元素都变成原值的 2 倍。

    for 循环写法

    my_list = 
    更多相关内容
  • 列表推导式总结

    千次阅读 2018-03-27 19:15:18
    列表推导 可以说是Python中一大亮点,可惜 ··· 我并不会用 从基础开始:~ GO [i for i in lis] ==> 这是最基础的了吧··· 等同于下面展开 l = [] for i in lis: l.append(i) 看看这种...

    list1 = [11, [22, 3], [4, ], [55, 66], 8, [9, [7, [12, [34, [26]]]]]]

    如这个list 如何将这些中括号去掉

    去括号,要知道一句话字符串操作要比类型操作容易。

    所以我的第一反应是

    li = str(list1).replace('[', '').replace(']', '').split(',')
    print([int(i.strip()) for i in li])

    皮这一下就是很快乐,反正达到要求了 不是么~

    正经的使用递归函数处理

    def func(li, l2=[]):
        for i in li:
            if isinstance(i, list):
                func(i)
            else:
                l2.append(i)
        return l2
    
    
    print(func(list1))

    中规中矩的一个递归函数 先判断是否是列表,是列表就循环,不是就添加

    老师给的装逼利器

    def func2(lis):
        return [li for item in lis for li in func2(item)] if isinstance(lis, list)else [lis]
    
    
    print(func2(list1))

    看不懂 但是我会拆开哇~

    def func2(lis):
        if isinstance(lis, list):
            result = []
            for item in lis:
                for li in func2(item):
                    result.append(li)
            return result
        else:
            return [lis]

    拆开以后是不是瞬间领悟了

    顺便拓展下 对于列表推导式:

    列表推导式 可以说是Python中一大亮点,可惜 ··· 我并不会用

    从基础开始:~ GO

    [i for i in lis] ==> 这是最基础的了吧··· 等同于下面展开
    l = []
    for i in lis:
        l.append(i)

    看看这种用法

    for i in lis:
        print(i)
    平常打印之类的 经常看眼数据对吧 换个方式看吧 ==> [print(i) for i in lis]

    反正都是一些常用的偷懒的方法

    [print(i) for i in lis if i>5] ==> 加一些简单的判断
    for i in lis:
        if i > 5:
            print(i)

    猜猜看下面的打印结果

    [i if i>8 else i-1 for i in range(10) if i>5]
    惊不惊喜 不止后面可以加判断条件 前面也可以继续处理
    l = []
    for i in range(10):
        if i > 5:
            if i > 8:
                l.append(i)
            else:
                l.append(i-1)

    一层循环没意思,加一层

    [print(li) for item in lis for li in item] ==> 循环嵌套
    for item in lis:
        for li in item:
            print(li)

    当然 多层循环也可以加条件

    [print(f'{y}*{x}={x*y}', end='\t\t') if x != 9 else print(f'{y}*{x}={x*y}') for y in range(1, 10) for x in range(y, 10)]
    emm 有点问题  但是 大概 可能 也算一个乘法表··· 逃~
    
    for y in range(1, 10):
        for x in range(y, 10):
            if x!= 9:
                print(f'{y}*{x}={x*y}', end='\t\t')
            else:
                print(f'{y}*{x}={x*y}')

    当然 还可以加很多很多东西, 比如网上的那些黑魔法(一行画个图。。之类的) 就是利用列表推导式 + join

    不过 推导式虽然好用,但不要写的太过于复杂,不利于阅读和维护。

    展开全文
  • 列表解析,又叫列表推导( list comprehension) 列表解析比 for 更精简,运行更快,特别是对于较大的数据集合 列表解析可以替代绝大多数需要用到 map和 filter的场合 列表推导提供了一个创建链表的简单途径,...
  • 多维列表(List的延伸) 二维列表 元组(Tuple)是什么元组的创建删除元组的访问计数元组的内置函数生成器推导创建元组元组的内容小结 字典(Dictionary)是什么字典的创建删除字典的键值访问字典元素的增
  • Python进阶-列表推导详解总结

    千次阅读 2019-09-15 21:57:55
    列表推导并不是什么特别的技术,它只是一种创建列表的简洁方法,目的是为了让大家写程序时更方便更快捷,写出更简洁的代码 初识列表 现在请创建一个list,元素为1到9的整数,先用普通方法做 lst = [] for i in ...

    列表推导式并不是什么特别的技术,它只是一种创建列表的简洁方法,目的是为了让大家写程序时更方便更快捷,写出更简洁的代码

    初识列表

    现在请创建一个list,元素为1到9的整数,先用普通方法做

    
    lst = []
    
    for i in range(10):
    
     lst.append(i)
    
    

    用了3行代码完成了这个功能,现在用列表推导式来做

    lst = [i for i in range(10)]
    
    

    仅仅是一行代码哦,一行代码就能解决的问题,就没必要用三行代码去做

    创建一个列表,元素为10以内的偶数,方法1

    lst = [i for i in range(2,10,2)]
    
    

    方法2

    lst = [i for i in range(2,10) if i%2 == 0]
    
    

    小做总结

    讲到这里,我必须稍微的做一个总结了,for语句前面的表达式,经过计算,最终留在新建的list列表中,for循环是一个不断取值的过程,而满足if语句的元素才有资格参与for语句前面的表达式计算。

    如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

    我这样讲,可能你还是不能够理解,换一个新的例子,创建一个列表,元素为10以内偶数的平方

    lst = [i*i for i in range(2,10) if i%2 == 0]
    
    

    程序解读:

    • for 语句前面的表达式是i*i

    • i 的值从2变化到9,但不是每一个i的值都会参加i*i的计算,i的值必须满足if条件语句才行

    配合函数

    for语句前面的表达式在某些情况下,仍然不能够满足实际需要,比如下面的要求,创建一个list,元素为10以内的偶数的平方,如果元素的个位数是6,则该元素的值转为字符串。

    根据要求,新创建的列表内容应当为[4, ‘16’, ‘36’, 64],你现在知道for语句前面的内容是表达式,更进一步,他们是lambda表达式,关于这个概念,我后续会介绍,想要用lambda表达式来完成这个功能,是比较困难的,这种情况下,可以配合函数来做,代码如下

    
    def func(i):
    
     res = i * i
    
     if res % 10 == 6:
    
     return str(res)
    
     return res
    
    lst = [func(i) for i in range(2,10) if i % 2 == 0]
    
    print lst
    
    

    列表推导式更快

    列表推导式不仅仅是让程序更简洁,其速度也比普通方法快,下面是一段测试比较代码

    在学习过程中有什么不懂得可以加我的
    python学习交流扣扣qun,784758214
    群里有不错的学习视频教程、开发工具与电子书籍。
    与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
    #coding=utf-8
    
    import time
    
    #装饰器函数
    
    def timefunc(func):
    
     def newfunc(*args,**kwargs):
    
     t1 = time.time()
    
     lst = func(*args,**kwargs)
    
     t2 = time.time()
    
     diff = t2 - t1
    
     print u'{func}用时{diff}'.format(diff=diff,
    
     func=func.func_name)
    
     return lst
    
     return newfunc
    
    @timefunc
    
    def func1(count):
    
     lst = []
    
     for i in range(count):
    
     lst.append(i)
    
     return lst
    
    @timefunc
    
    def func2(count):
    
     lst = [i for i in range(count)]
    
     return lst
    
    count = 1000000
    
    func1(count)
    
    func2(count)
    
    

    这段代码里用到了装饰器,后续我也会讲,程序运行的结果如下:

    func1用时0.144474029541

    func2用时0.0513877868652

    可以明显的看到,使用列表推导式,创建相同内容的列表,要比普通方法快接近3倍的速度

    列表推导式总结优点

    1. 简洁

    2. 高效

    缺点

    如果使用不当,会造成阅读困难。

    写出别人难以理解的代码是非常容易的,如果再用心些,写出一份几天后自己都看不懂的代码也不是什么难事,真正难的是写出别人看得懂的代码,列表推导式虽然简洁,但一味的简洁,在推导式里写上一堆的代码,就造成理解困难,比如下面的题目:

    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    
    

    将这个嵌套列表转成一维列表,转换后,列表内容为

    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    

    如果用列表推导式,则可以这样写

    
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    
    b = [j for i in a for j in i]
    
    print(b)
    
    

    上面的代码我已经不想去解释了,如果是用普通方法,则可以这样写

    在学习过程中有什么不懂得可以加我的
    python学习交流扣扣qun,784758214
    群里有不错的学习视频教程、开发工具与电子书籍。
    与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    
    b = []
    
    for i in a:
    
     for j in i:
    
     b.append(j)
    
    print b
    
    

    这两份代码,你更喜欢用哪一个呢?

    展开全文
  • python列表总结

    千次阅读 2020-09-10 11:15:14
    二、列表2.1 列表的语法2.2 列表的创建2.2.1 基本语法创建2.2.2 list()创建2.2.3 range()创建整数列表2.2.4 推导生成列表2.3列表元素的增加和删除2.3.1 添加元素 append()2.3.2 运算符操作2.3.3 extend()方法2.3.4...

    序列(列表)


    一、序列是什么?

    序列是一种数据的存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续内存空间,比如一个整数序列[10,20,30,40],可以这样示意表示
    在这里插入图片描述

    由于Python3中一切皆对象,在内存中实际按照如下方式存储:a = [10,20,30,40]

    在这里插入图片描述
    从图示中,可以看出序列中存储的是整数对象的地址,而不是整数对象的值。

    python中常用的序列结构有:

                             字符串、列表、元组、字典、集合

    二、列表

    2.1 列表的语法

    列表:用于存储任意数目、任意类型的数据集合。
    列表是内置可变序列,是包含多个元素的有序连续的内存空间。定义语法格式:
    a = [10,20,30,40]
    其中,10,20,30,40 这些称为:列表 a 的元素。
    列表中的元素可以各不相同,可以是任意类型。比如:
    a = [10,20,‘abc’,True]
    代码如下(示例):

    2.2 列表的创建

    2.2.1 基本语法创建
    >>> a = [10,20,'gaoqi','sxt']
    >>> a = [] #创建一个空的列表对象
    
    2.2.2 list()创建

    使用 list()可以将任何可迭代的数据转化成列表

    >>> a = list() #创建一个空的列表对象
    >>> a = list(range(10))
    >>> a
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> a = list("gaoqi,sxt")
    >>> a
    ['g', 'a', 'o', 'q', 'i', ',', 's', 'x', 't']
    
    2.2.3 range()创建整数列表

    range()可以帮助我们非常方便的创建整数列表,这在开发中及其有用。语法格式为:
    range([start,] end [,step])
    start 参数:可选,表示起始数字。默认是 0
    end 参数:必选,表示结尾数字。
    step 参数:可选,表示步长,默认为 1
    python3 中 range()返回的是一个 range 对象,而不是列表。我们需要通过 list()方法将其
    转换成列表对象。
    典型示例如下:

    >>> list(range(3,15,2))
    [3, 5, 7, 9, 11, 13]
    >>> list(range(15,3,-1))
    [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4]
    >>> list(range(3,-10,-1))
    >[3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
    
    2.2.4 推导式生成列表
    >>> a = [x*2 for x in range(5)] #循环创建多个元素
    >>> a
    [0, 2, 4, 6, 8]
    >>> a = [x*2 for x in range(100) if x%9==0] #通过 if 过滤元素
    >>> a
    [0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]
    

    2.3列表元素的增加和删除

    当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这
    个特点涉及列表元素的大量移动,效率较低。除非必要,我们一般只在列表的尾部添加元素
    或删除元素,这会大大提高列表的操作效率。

    2.3.1 添加元素 append()

    ```c`
    原地修改列表对象,是真正的列表尾部添加新的元素,速度最快,推荐使用。

    a = [20,40]
    a.append(80)
    a
    [20, 40, 80]
    ``

    2.3.2 运算符操作

    并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次
    复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。

    >>> a = [20,40]
    >>> id(a)
    46016072
    >>> a = a+[50]
    >>> a 
    [20,40,50] 
    >>> id(a)
    46015432
    
    2.3.3 extend()方法

    #将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象。

    
    >>> a = [20,40]
    >>> id(a)
    46016072
    >>> a.extend([50,60])
    >>> id(a)
    46016072
    
    2.3.4 insert()插入元素

    使用 insert()方法可以将指定的元素插入到列表对象的任意制定位置。这样会让插入位置后
    面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。类似发生这种
    移动的函数还有:remove()、pop()、del(),它们在删除非尾部元素时也会发生操作位置后
    面元素的移动。

    >>> a = [10,20,30]
    >>> a.insert(2,100)
    >>> a
    [10, 20, 100, 30]
    
    2.3.5 乘法扩展

    使用乘法扩展列表,生成一个新列表,新列表元素时原列表元素的多次重复。

    >>> a = ['sxt',100]
    >>> b = a*3
    >>> a
    ['sxt', 100]
    >>> b
    ['sxt', 100, 'sxt', 100, 'sxt', 100]
    # 适用于乘法操作的,还有:字符串、元组。例如:
    >>> c = 'sxt' >>> d = c*3
    >>> c
    'sxt' >>> d
    'sxtsxtsxt
    
    2.3.6 列表元素的删除

    删除指定位置元素:del

    >>> a = [100,200,888,300,400]
    >>> del a[1]
    >>> a
    [100,200,300,400]
    

    此方法涉及字符移动,大数据集中避免使用
    在这里插入图片描述

    2.3.7 pop()方法

    pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。

    >>> a = [10,20,30,40,50]
    >>> a.pop()
    50
    >>> a
    [10, 20, 30, 40]
    
    >>> a.pop(1)
    20
    >>> a
    [10, 30, 40]
    
    2.3.8 remove()方法

    删除首次出现的指定元素,若不存在该元素抛出异常。

    >>> a = [10,20,30,40,50,20,30,20,30]
    >>> a.remove(20)
    >>> a
    [10, 30, 40, 50, 20, 30, 20, 30]
    >>> a.remove(100)
    Traceback (most recent call last):
    File "<pyshell#208>", line 1, in <module>
    a.remove(100)
    ValueError: list.remove(x): x not in list
    

    2.4 列表元素访问和计数

    • 访问可以通过索引直接访问元素
    >>> a = [10,20,30,40,50,20,30,20,30]
    >>> a[2]
    30
    >>> a[10]
    Traceback (most recent call last):
    File "<pyshell#211>", line 1, in <module>
    a[10]
    IndexError: list index out of range
    

    2.5 index()获得指定元素在列表中首次出现的索引

    index()可以获取指定元素首次出现的索引位置。语法是:index(value,[start,[end]])。其中,
    start 和 end 指定了搜索的范围。

    >>> a = [10,20,30,40,50,20,30,20,30]
    >>> a.index(20)
    1
    >>> a.index(20,3)
    5
    >>> a.index(20,3) #从索引位置 3 开始往后搜索的第一个 20
    5
    >>> a.index(30,5,7) #从索引位置 57 这个区间,第一次出现 30 元素的位置
    6
    

    2.6 count()获得指定元素在列表中出现的次数

    >>> a = [10,20,30,40,50,20,30,20,30]
    >>> a.count(20)
    3
    

    2.7 成员资格判断

    判断列表中是否存在指定的元素,我们可以使用 count()方法,返回 0 则表示不存在,返回
    大于 0 则表示存在。但是,一般我们会使用更加简洁的 in 关键字来判断,直接返回 True
    或 False。

    >>> a = [10,20,30,40,50,20,30,20,30]
    >>> 20 in a
    True
    >>> 100 not in a
    True
    >>> 30 not in a
    False
    

    2.8 切片操作(包头不包尾)

    切片 slice 操作可以让我们快速提取子列表或修改。标准格式为:
    [起始偏移量 start:终止偏移量 end[:步长 step]]

    在这里插入图片描述
    在这里插入图片描述

    2.9 列表排序

    修改原列表,不建新列表的排序

    >>> a = [20,10,30,40]
    >>> id(a)
    46017416
    >>> a.sort() #默认是升序排列
    >>> a
    [10, 20, 30, 40]
    >>> a = [10,20,30,40]
    >>> a.sort(reverse=True) #降序排列
    >>> a
    [40, 30, 20, 10]
    >>> import random
    >>> random.shuffle(a) #打乱顺序
    >>> a
    [20, 40, 30, 10]
    

    建新列表的排序

    >>> a = [20,10,30,40]
    >>> id(a)
    46016008
    >>> a = sorted(a) #默认升序
    >>> a
    [10, 20, 30, 40]
    >>> id(a)
    45907848
    

    2.10 reversed()返回迭代器

    内置函数 reversed()也支持进行逆序排列,与列表对象 reverse()方法不同的是,内置函数
    reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象
    并且迭代器对象仅仅使用一次,第二次为空

    >>> a = [20,10,30,40]
    >>> c = reversed(a)
    >>> c
    <list_reverseiterator object at 0x0000000002BCCEB8>
    >>> list(c)
    [40, 30, 10, 20]
    >>> list(c)
    []
    

    第一次输出了元素,第二次为空。那是因为迭代对象
    在第一次时已经遍历结束了,第二次不能再使用。

    2.11 列表相关的其他内置函数汇总

    max 和 min
    用于返回列表中最大和最小值。
    [40, 30, 20, 10]

    >>> max(a)
    20
    >>> min(a)
    3
    

    2.12 sum

    对数值型列表的所有元素进行求和操作,对非数值型列表运算则会报错。

    >>> a = [3,10,20,15,9]
    >>> sum(a)
    57
    

    2.13 多维列表

    在这里插入图片描述

    a = [
    ["高小一",18,30000,"北京"], ["高小二",19,20000,"上海"], ["高小一",20,10000,"深圳"], ]
    

    在这里插入图片描述

    for m in range(3):
    for n in range(4):
    print(a[m][n],end="\t")
    print() #打印完一行,换行
    

    在这里插入图片描述

    展开全文
  • 盘点Python列表生成的三种方法

    千次阅读 2021-02-10 00:57:24
    一、前言列表生成即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成。二、案例分析三种方法要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))。print(list...
  • 对比 | Python中超级好用的“列表解析”、“字典解析”、“集合解析
  • Python列表推导的使用方法

    千次阅读 2020-12-12 12:41:12
    这篇文章主要介绍了Python列表推导的使用方法,大家参考使用吧1.列表推导书写形式:[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]2.举例说明:#!/usr/bin/python# -*- coding: utf-8 -*-li...
  • 最近在工作中为了减少代码的行数而开始使用列表推导, 结果非常好, 七八行的代码只需要用一行代码就能够写完, 虽然逻辑对于不怎么使用列表推导的人来说会比较困难, 但是习惯之后也相当容易。 因此强烈推荐...
  • 1.三元表达式 表示方式: 结果+if判断+else条件 ...列表推导 表示方式: [表达式(包含x)+for x in iterable+条件](后面这个条件可写可不写) 注:这里,[]中括号必须写,然后就是把中括号换成普通的括号()的话...
  • 列表型布局套路总结

    千次阅读 2018-06-03 16:33:53
    手机屏幕尺寸有限,几乎每个 app 的内容区,都会用列表呈现。不信可以打开你手机里的任意一个 app 看看,99%的 app 的内容区都能被抽象成一个大列表。只是根据内容的丰富度,列表的复杂度有所不同。内容区的结构骨架...
  • Python列表推导

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

    2020-12-24 08:05:18
    列表推导(list comprehensions) 场景1:将一个三维列表中所有一维数据为a的元素合并,组成新的二维列表。...官方解释:列表解析是Python内置的非常简单却强大的可以用来创建list的生成。 强大具体如何体现?
  • python列表推导练习

    千次阅读 2021-12-19 21:54:40
    python列表推导练习总结: 问题一 如何快速生成一个列表 [“data0”,“data1”,“data2”,“data3”,…,“data99”,] 问题二 如何快速生成一个列表[“data0”,“gy1”,“data2”,“gy3”,…,“data98”,“gy99”] ...
  • python列表、元组、字典、集合总结

    千次阅读 2020-01-31 20:02:16
    python列表列表、元组、字典分别对应list, tuple, dict 1.list的简介 列表是python内置的一种数据类型,是一种有序的集合,可对其进行增删改查。列表中的元素不一定是同类型的。列表是可变序列 2.list的初始...
  • 主要介绍了python实现把二维列表变为一维列表的方法,结合实例形式总结分析了Python列表推导、嵌套、循环等相关操作技巧,需要的朋友可以参考下
  • 华为C语言编程规范(精华总结

    万次阅读 多人点赞 2020-03-24 09:48:55
    在“代码能用就不改”的指导原则之下,大量的烟囱设计及其实现充斥着各产品代码之中。新需求增加带来的代码拷贝和修改,随着时间的迁移,产品中堆砌着许多类似或者重复的代码。 项目组应当使用代码重复度检查工具...
  • python 列表推导实现矩阵转置

    千次阅读 2020-09-07 15:57:00
    这里使用python的列表推导一行代码实现矩阵转置。 代码如下: 这里表示的是4X3的矩阵。 1 matrix = [[1,2,3], [4,5,6], [7,8,9],[10,11,12]] View Code 现在使用一行代码-列表推导 1 [[row[i] for row in ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 169,844
精华内容 67,937
关键字:

列表式总结