Python3.6 zip lambda

折腾好久,容我说一句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参考陈振玺科学网博客

你可能感兴趣的:(python)