Python3.6 zip lambda

    xiaoxiao2021-03-25  66

    折腾好久,容我说一句numpy万岁啊…

    最近在学习零基础入门深度学习(1) - 感知器 向hanbingtao大大致意崇高敬意! 但是我发现他是Python2写的,但是我懒用的是3… = = 然后就出现了一堆问题,本来也是小白新手没从头写过什么代码,正好借这个机会徒手造轮子 写一点心得

    省事系列

    _ = i

    self.weights = [0.0 for _ in range(input_num)] #原文,下面两行是改编 weights = [0.0 for _ in range(2)] print(weights) #[0.0, 0.0]

    _和i效果一样,就是个“垃圾桶” 好处是省了一个变量了。

    lambda

    lambda真是神器,省了一个定义函数的时间,比如我需要求几个数之和,在reduce里面必须要有两个参数,那么还得定义一个函数,比如累加l1 = [1,2,3,4,5,6]

    def f(x,y): return x + y

    然后进行调用

    reduce(f,l1) #调用的函数要写在前面

    但是有了lambda,就可以直接这样

    from functools import reduce #python3需要调用,2直接可以用 l1 = [1,2,3,4,5,6] reduce(lambda a,b: a + b,l1)

    特别是写简单的感知器,非常有效,节录如

    reduce(lambda a, b: a + b, map(lambda x, w: x * w, zip(input_vec, self.weights)) , 0.0)+self.bias)

    zip

    zip函数接受任意多个列表的输入,返回一个以元组(tuple)为元素的列表。在Python的定义中,元组通过小括号表示,列表通过中括号表示,其中列表可以修改,而元组不可以修改。通过Python的help命令,我们可以得到zip函数的具体解释为“Return a list of tuples, where each tuple contains the ith element from each of the argument sequences. The returned list is truncated in length to the length of the shortest argument”其大致意思就是分别提取N个列表的第i个元素组成一个元组,然后再将这些元组作为基本元素构成一个列表,其中列表的长度与最短的列表一致。zip函数的输入对象除列表以外,还可以是元组,但其输出均是以元组为元素的列表。几个栗子,运行在python3下

    1.

    name = ["Fitz","Jemma"] Add=["NY","Washington"] z=zip(name, Add) print(z)

    输出[(“Fitz”,”NY”),(“Jemma”,”Washington”)]

    2.

    name = ["Fitz","Jemma"] Add=["NY","Washington","Seatle"] z=zip(name, Add)

    [(“Fitz”,”NY”),(“Jemma”,”Washington”)] #输出的列表长度与最短的输入列表一致

    3.对比下不同

    name = ["Fitz","Jemma"] Add=["NY","Washington","Seatle"] z=zip(name[0], Add[0])#列表的索引从0开始,0表示分别对name和Add的第一个元素进行迭代输出 print (list(z))

    [(‘F’, ‘N’), (‘i’, ‘Y’)]

    name = ["Fitz","Jemma"] Add=["NY","Washington","Seatle"] z=zip(name[1], Add[1])#列表的索引从0开始,0表示分别对name和Add的第一个元素进行迭代输出 print (list(z))

    [(‘J’, ‘W’), (‘e’, ‘a’), (‘m’, ‘s’), (‘m’, ‘h’), (‘a’, ‘i’)]

    name = ["Fitz","Jemma"] Add=["NY","Washington","Seatle"] z=zip(name[2], Add[2])#列表的索引从0开始,0表示分别对name和Add的第一个元素进行迭代输出 print (list(z))

    IndexError: list index out of range

    4 如果输入为数字 会报错

    x=[111,2222,322,422] y=[225434,341,4234132,512123] z=zip(x[0],y[0]) print (list(z))

    TypeError: zip argument #1 must support iteration 这样子就好了。:

    x=['111','2222','322','422'] y=['225434','341','4234132','512123'] z=zip(x[0],y[0]) print (list(z))

    [(‘1’, ‘2’), (‘1’, ‘2’), (‘1’, ‘5’)]

    因吹斯听! zip参考陈振玺科学网博客

    转载请注明原文地址: https://ju.6miu.com/read-34173.html

    最新回复(0)