精华内容
下载资源
问答
  • 除了像上面介绍的 [x ** 2 for x in L] 这种基本语法之外,列表推导式还有一些高级的扩展。 4.1. 带有if语句 我们可以在 for 语句后面跟上一个 if 判断语句,用于过滤掉那些不满足条件的结果项。 例如,我想去除...

    http://www.cnblogs.com/bonelee/p/8545263.html

    高级语法

    除了像上面介绍的 [x ** 2 for x in L] 这种基本语法之外,列表推导式还有一些高级的扩展。

    4.1. 带有if语句

    我们可以在 for 语句后面跟上一个 if 判断语句,用于过滤掉那些不满足条件的结果项。

    例如,我想去除列表中所有的偶数项,保留奇数项,可以这么写:

    >>> L = [1, 2, 3, 4, 5, 6]
    >>> L = [x for x in L if x % 2 != 0]
    >>> L
    [1, 3, 5]
    

    4.2. 带有for嵌套

    在复杂一点的列表推导式中,可以嵌套有多个 for 语句。按照从左至右的顺序,分别是外层循环到内层循环。

    例如:

    >>> [x + y for x in 'ab' for y in 'jk']
    ['aj', 'ak', 'bj', 'bk']
    

    4.3. 既有if语句又有for嵌套

    列表推导式可以带任意数量的嵌套 for 循环,并且每一个 for 循环后面都有可选的 if 语句。

    通用语法:

    [ expression for x in X [if condition]
                 for y in Y [if condition]
                 ...
                 for n in N [if condition] ]
    

    例如,下面的代码输出了0~4之间的偶数和奇数的组合。

    >>> [(x, y) for x in range(5) if x % 2 == 0 for y in range(5) if y % 2 == 1]
    [(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
    

    等价于下面的一般 for 循环:

    >>> L = []
    >>> for x in range(5):
    ...     if x % 2 == 0:
    ...         for y in range(5):
    ...             if y % 2 == 1:
    ...                 L.append((x, y))
    >>> L
    [(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
    

    4.4. 列表推导式生成矩阵

    生成矩阵的方式有多种,例如手动赋值、一般for循环,还有就是列表推导式。如果我们要用列表推导式生成下面的矩阵,可以怎么写?

    >>> M = [[1, 2, 3],
    ... [4, 5, 6],
    ... [7, 8, 9]]
    

    一种方法是:

    >>> M = [[x, x+1, x+2] for x in [1, 4, 7]]
    >>> M
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    

    矩阵的列数少时可以使用这种方法。

    如果矩阵的列数较多,我们可以使用另外一种方式:在循环变量的表达式中使用列表推导式。

    具体代码如下:

    >>> M = [[y for y in range(x, x+3)] for x in [1, 4, 7]]
    >>> M
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    

    与之前带 for 嵌套的语法不同,这个例子中,实际使用的是最基本的 [expression for x in L] 语法,只有一个 for 语句。

    复杂的地方在于前面的变量表达式 expression 不再是简单的变量运算,而是一个列表推导式,在这个例子中就是 [y for y in range(x, x+3)]
    内层的列表推导式返回一个行向量,而这些行向量经由外层的列表推导式,最终形成一个二维列表,也就是我们想要的矩阵。

    当然,在实际的应用中不能单纯追求代码的简洁,还要考虑到代码的可读性和维护成本。
    如果代码变得过于复杂,不易于理解,我们宁可多写几行代码来增加它的可读性。

    5. 生成器表达式

    生成器表达式与列表推导式的语法相同,区别在于生成器表达式的外面使用圆括号,而列表推导式使用方括号。

    有关生成器的介绍,请参考这篇文章:《Python高级编程之初识生成器》

    6. 集合推导式和字典推导式

    注意:集合推导式和字典推导式只有在Python2.7以及之后的版本中才有,Python2.7之前的版本不支持这两种推导式。

    集合推导式的语法与列表推导式相同,只需要把外面的方括号改成花括号即可。

    例如,我们可以通过以下方式来生成一个集合:

    >>> {x ** 2 for x in [1, 2, 2]}
    {1, 4}
    

    字典推导式的外面也是使用花括号,不过花括号的内部需要包含键值两部分。

    在值不重复的情况下,我们可以通过字典推导式快速交换键值对:

    >>> D = {'a':1, 'b':2, 'c':3}
    >>> D = {value: key for key, value in D.items()}
    >>> D
    {1: 'a', 2: 'b', 3: 'c'}
    

    from:http://www.codebelief.com/article/2017/02/python-advanced-programming-list-comprehensions/

     

    lix = [];
    for x in range(1, 101):
        lix.push(x ** 2)
    执行结果:lix = [1,4,9,16,25.....]
    

    在列表构建器的表达式中,可以添加简单的条件处理

    lix = [x * x for x in range(1, 101) if x % 2 == 0]
    执行结果:lix = [4,16,36.....]
    

    也可以在循环过程中,来使用多层循环嵌套,实现更加复杂的效果

    lix = [x + y  for x in "abc" for y in "xyz"]
    执行结果:['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
    

    列表动态构建器

    但是我们通过前面的学习已经知道,这些数据都是加载到内存中的,如果列表中的数据量比较大的情况下,内存消耗是比较严重的
    在某些情况下,我们只需要使用列表中的一部分数据,后面的数据并不是特别关心,如:通过列表来记录一个符合某种规则的序列,每次我们只是关心下一个数据,并不关心后面的N条数据,应该怎么做呢?比如我们需要一个奇数列表

    # 常规构建器的做法
    lix = [2*x + 1 for x in range(1, 101)]
    # 执行结果:[1,3,5,7,9,11,13,15,17.....]
    # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    # 常规构建器可以直接构建生成
    # 但是存在问题,如果一次构建的数据量太大,会严重占用内存
    # 我们在使用该列表的时候,有可能只是使用前10项
    # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    # 使用列表动态构建器
    lix = (2 * x - 1 for x in range(1, 101))
    # 执行结果:print (lix) --> <generator object <genexpr> at 0x7f232e462048>
    next(lix)
    # 执行结果:1
    next(lix)
    # 执行结果:3
    next(lix)
    # 执行结果:5
    next(lix)
    # 执行结果:7
    # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    # 列表动态构建器
    # 和构建器基本没有区别,创建的时候列表中是没有数据的
    # 必须通过next()函数来获取列表中的下一条数据
    # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    


    from:https://www.jianshu.com/p/fa3fda487f15

     

     

    []改成(),就创建了一个generator:

    >>> L = [x * x for x in range(10)]
    >>> L
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    >>> g = (x * x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x1022ef630>
    

    L和g的区别仅在于最外层的[]()L是一个list,而g是一个generator。

    如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值:

    >>> next(g)
    0
    >>> next(g)
    1
    >>> next(g)
    4
    >>> next(g)
    9
    >>> next(g)

    next(g)实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象:

    >>> g = (x * x for x in range(10))
    >>> for n in g:
    ...     print(n)
    ... 
    0
    1
    4
    9
    要把fib函数变成generator,只需要把print(b)改为yield b就可以了:
    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1
        return 'done'
    
     

    yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

     
    >>> f = fib(6)
    >>> f
    <generator object fib at 0x104feaaa0>
    
     

    return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

     
    展开全文
  • https://www.pythoncentral.io/how-to-use-pythons-xrange-and-range/ xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器。 ... ...
     
    

    xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器。
    http://www.runoob.com/python/python-func-xrange.html

    展开全文
  • import panda lambda 定义 一个匿名函数,见下面 格式以及使用方法: lambda x(传入的参数):要执行的语句(这条语句执行完之后,就会返回一个值,也...其中 x就相当于传入的参数,x+2也就是我们要执行的语...

    lambda

    定义

    一个匿名函数,见下面

    格式以及使用方法:

    lambda x(传入的参数):要执行的语句(这条语句执行完之后,就会返回一个值,也就是函数的返回值)
    例:
    lambda x:x+2
    上面那条语句就相当于定义了一个函数,但是怎么用这个函数呢?
    可以写f=lambda x:x+2
    f(3)
    到最后会输出9
    其中 x就相当于传入的参数,x+2也就是我们要执行的语句
    实际上就相当于
    def f(x):
       return x+2

    高级用法(和for与map连用):

    与for连用:

    以下是几种错误的例子:
    ①f=lambda x:x*i for i in range(4)
    ②f=lambda x:’’.append(i) for i in x.split(’ ‘)
    ③f=’’.join([lambda x:i for i in x.split(’ ‘)])
    ④f=lambda x:’’.append(i) for i in range(4)

    这是令我误入歧途,但实际上正确的一个例子
    f = [lambda x:x*i for i in range(4)]

    对错误例子的分析

    ①f=lambda x:xi for i in range(4)
    一定要注意!!!! m for m in xxxxx是python中for的高级用法,
    只能,也必须返回一个列表!!!!!!!而且每一个m不能来进行其他“不能返回一个元素(装到列表里)”的操作
    也就是说,他不能这样写(假设现在有a_dict={1:5,0:7}):
    [a_dict[m]=1 for m in range(2)] (这样写会报 invalid syntax错)
    但是可以[a_dict[m] for m in range(2)]这样写
    这是因为 a_dict[m]=1,这么写没有返回值,但是如果写a_dict[m],那么对于每一个m,a_dict[m]都会返回一个值,比如m=1,那a_dict[m]=5,这个是可以装到列表里的


    现在回来看一下f=lambda x:xi for i in range(4) ,其实xi for i in range(4)这么写是没有错的,错误的是 for的高级用法返回的是一个列表,必须用一个[]给他套起来
    也就是必须写成 f=lambda x:[x
    i for i in range(4)]

    ②和③
    其实都犯了一个错误 就是[]没套上,或者套错了地方
    ②和④ 当时我是咋想的呢,我估计以为 ‘’ 这个能使一个全局的东西了吧(说不清楚)
    ③呢是因为 []套错地方了
    也就是f=’’.join([lambda x:i for i in x.split(’ ‘)])
    应该把那个[放到右边去 也就是
    f=’’.join(lambda x:[i for i in x.split(’ ‘)]),这样就对了,
    因为!!!是lambda x:的里面才是返回值,而不是lambda x:i for i in x.split(’ ')是个返回值

    正确例子:

    a=prefix_title.applymap(lambda x:’’.join([str(word_id_dict[y])+’ ’ for y in x.split(’ ')]))
    我想让句子中的单词都映射成对应的编号
    比如 我 是 你 爸爸
    可以编码成 0 2 1 3
    我的思路是将矩阵中每一个位置的元素(也就是每一个句子)取出来
    然后 按空格分成一个数组,对数组中每一个元素进行遍历,映射为一个个数字
    然后把这些数字直接拼成一个字符串(用join函数就行)

    与map连用(以后更新)

    展开全文
  • for x in ...循环 就是把每个元素代入变量x,然后执行缩进块的语句。 range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。 比如我们想计算1-10的整数之和,可以用一个sum变量做累加: sum = 0...

    for x in ...循环 就是把每个元素代入变量x,然后执行缩进块的语句。

    range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。

    比如我们想计算1-10的整数之和,可以用一个sum变量做累加:

    sum = 0
    
    for x in [1,2,3,4,5,6,7,8,9,10]:
    
    sum = sum + x
    
    print(sum)
    sum = 0
    
    for x in range(11):
    
    
    sum = sum + x
    
    
    print(sum)

    以上两种表示方法,结果相同。简单易错哦!一定要细心

    range(101)就可以生成0-100的整数序列,计算如下:

    sum = 0
    
    for x in range(101):
    
    sum = sum + x
    
    print(sum)

     

    展开全文
  • 转载:... 看代码时偶然看到的一个写法: sentences=[y for x in sentences for y in x] 之前没看到过,一头雾水,经过查资料后发现是这样去理解的: def f(z): for y in z: for x in ...
  • 列表推导式[x for x in range(n)]

    万次阅读 多人点赞 2018-05-24 00:10:53
    1.匿名函数 匿名函数语法形式: lambda [arg1,arg2,arg3,argn]:expression 注解: lambda 关键字 argi 函数参数 expression 程序逻辑,即函数要返回值的表达式 ... c = lambda x,y:x * x + y...
  • python中[x for x in range(n)]列表推导式

    千次阅读 2019-12-05 21:25:21
    列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。...scales = [i for i in range(5, 1, -1)] 也可以配合for in 进行循环 ...
  • 用python写杨辉三角时有一句代码是L=[L[X]+L[X+1]for x in range(len(L)-1)] 我想知道当len(L)=1时 x值为多少
  • for i,x in enumerate() 函数解释

    千次阅读 2021-01-11 17:05:26
    enumerate就是枚举的意思,把元素一个个列举出来,第一个是什么,第二个是什么,所以他返回的是元素以及对应的索引。... for i,j in enumerate(line): ... print(i,j) ... 0 1 1 2 2 3 3 4 4 5 ...
  • python列表解析([ x for x in list])

    千次阅读 2016-03-06 20:30:57
    转载至 列表解析 定义和说明 >Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,...>列表解析比 for 更精简,运行更快,特别是对于较大的数据集合 >列表解析可以替代绝大多数需要用到 map和 filt
  • a = [lambda : x for x in range(3)] &gt;&gt;&gt; a [&lt;function &lt;listcomp&gt;.&lt;lambda&gt; at 0x7f79c874ae18&gt;, &lt;function &lt;li
  • 说说我对[lambda x: x*i for i in range(4)]的理解 前言 这段代码早前在群里看到过,直接上图def multipliers(): return [lambda x:i*x for i in range(4)] print([m(2) for m in multipliers()]) 第一眼看,不...
  • 序列解包(for x,y in zip(keys, values):)详解。

    万次阅读 多人点赞 2018-09-28 01:02:20
    序列解包是一个非常重要和常用的一个功能,使用序列解包可以用非常简洁的方法完成复杂的功能。增强代码的可读性,减少代码量。 1.使用序列解包对多个变量同时进行赋值。 a, b, c = 1, 2, 3 ...x, y, z = m...
  • print(list(map(lambda x: x * x, [y for y in range(3)])))的输出结果? print(list(map(lambda x: x * x, [y for y in range(3)]))) 首先列表推导式生成[0,1,2] [y for y in range(3)] 然后map函数接受...
  • 一、问题描述 fun = [lambda x: x*i for i in range(4)] for item in fun: print(item(1)) 上述式子的输出结果: 预计结果为:0, 2, 4, 6 实际输出为:3, 3, 3, 3 原理:i 在外层作用域 lambd...
  • items是列表 items =[[x, y]for (y, x) in pairs]是什么意思
  • for 循环和 for/in 循环的区别

    千次阅读 2019-03-04 21:22:54
    for 循环和 for/in 循环的区别 for - 循环代码块一定的次数 for/in - 遍历数组或者对象的属性(对数组或者对象的属性进行循环操作) 注意:for/in 循环会访问该对象的原型,应该用在非数组对象的遍历上,不建议使用...
  • 最近公司换了一批电脑,在我配置好Android开发环境准备跑一下项目的时候,启动AS虚拟器的时候出现了这样的提示,我也是一头雾水啊,大概知道是要开启BIOS中的VT-x技术,经过各种波折,终于解决了,下面说一下操作...
  • pyhton (for in if)用法

    万次阅读 多人点赞 2018-08-24 15:30:36
    python 循环高级用法 [expression for x in X [if condition] for y in Y [if condition] ... for n in N [if condition] ]按照从左至右的顺序,分别是外层循环到内层循环 高级语法 除了像上面介绍的 [x ** 2 for...
  • x = [i for i in range(5)] >>x=[0, 1, 2, 3, 4] 第一个i表示要放在x中的值 2、条件语句 if 判断条件1: 执行语句1…… elif 判断条件2: 执行语句2…… else: 执行语句3……· 3、enumerate使用 list=['小明',...
  • for x in range(0,10) 即把每个变量都带入x  例如使用python打印9*9乘法表 for x in range(1,10):  for y in range(1,10):  if y  print("%1d*%1d=%2d"%(x,y,x*y),end=' ')  print() python中缩进...
  • js中的for infor of 的区别

    千次阅读 多人点赞 2019-04-09 21:01:29
    for...infor...of的区别 [ ]for...in是ES5的标准,该方法遍历的是对象的属性名称(key:键名)。一个Array对象也是一个对象,数组中的每个元素的索引被视为属性名称,所以在使用for...in遍历Array时,拿到的是每个...
  • 很久没开virtualBox,突然心血来潮,打算开一下玩一下的,结果报了个VT-x is disabled in the BIOS for both all CPU modes (VERR_VMX_MSR_ALL_VMX_DI, 这个以前我遇过,不过还是记录一下吧,忘记了也找了很久。...
  • Python3 for in if 和 逻辑判断 的使用

    千次阅读 2019-08-09 17:24:49
    题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序...rank = [list(each) for each in itertools....
  • Python基础知识: for . in range()循环

    万次阅读 2019-08-10 20:47:43
    Python for x in range()循环打印四个数字能生成多少个互不相同且无重复数字的三位数 #记录打印三位数的个数 count = 0 #用i控制第一位输出的位数 for i in range(1,5): #用j控制第二位输出的位数 for j in range...
  • python: for in zip() 并行遍历

    万次阅读 多人点赞 2019-05-14 20:43:49
    list_1 = [1, 2, 3, 4] list_2 = ['a', 'b', 'c'] for x, y in zip(list_1, list_2): print(x, y)
  • x509: cannot validate certificate for x.x.x.x because it doesn't contain any IP SANs 解决: 一, 编辑openssl.cnf,在[v3_ca]下面添加:subjectAltName = IP:IP地址  注意, 直接写成123.56.157.144就行, 不用...
  • python 循环结构(for-in)

    千次阅读 2018-08-12 15:20:38
    循环结构(for-in) 说明:也是循环结构的一种,经常用于遍历字符串、列表,...for x in y: 循环体 执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束 示例1:遍历字符串 s = 'I love you m...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,463,623
精华内容 985,449
关键字:

forinxx