迭代计算

面试(五)

北城余情 提交于 2019-11-30 07:16:46
Java集合类框架的最佳实践有哪些? 元素的大小是固定的,而且能事先知道,用Array而不是ArrayList。 如果能估计出存储的元素的数目,可以设置初始容量来避免重新计算hash值或者是扩容。 为了类型安全,可读性和健壮性的原因多使用泛型。同时,使用泛型还可以避免运行时的ClassCastException。 使用JDK提供的不变类(immutable class)作为Map的键可以避免为我们自己的类实现hashCode()和equals()方法。 底层的集合实际上是空的情况下,返回长度是0的集合或者是数组,不要返回null。 Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。 集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类。 (2)随着使用经过严格测试的集合框架类,代码质量会得到提高。 (3)通过使用JDK附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 集合框架中的泛型有什么优点? Java1.5引入了泛型

迭代器和生成器的用法

 ̄綄美尐妖づ 提交于 2019-11-30 05:41:12
首先在了解解析式之前,我们先来看一个列子:一个列表,元素是0-9,列表中的每个值自增1,该如何实现: 方法一:遍历列表,对其元素进行加1操作后放到一个新的列表中 1 lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 3 for index, i in enumerate(lst): 4 lst[index] += 1 5 print(lst) 方法二:通过map函数来实现 a = map(lambda x:x+1, lst) print(a) for x in a: print(x) 方法三:通过列表解析式,一行搞定 1 lst2 = [x+1 for x in lst] 2 print(lst2)   方法三就是列表解析式的写法,返回一个新的列表。   那么什么是生成器呢?通过列表解析式我们可以发现,它会直接创建一个新的列表,这样不好的地方就是占用内存,我们知道内存是有限的,如果列表中的元素有几百万,而有时候就仅仅需要个别的数据,那么就会大大浪费内存的空间。   所以,我们是否可以想一种办法来解决这个问题呢?在Python中,生成器就很好的解决了这个问题。我们可以假设列表中的元素能否通过某种算法来推算出来呢?在需要某个数据的时候通过计算来得到这个数据,这样就不会直接生成一个列表来存储许多无用的数据了。在python中,这种一边循环一边计算的机制

一个关于国密SM4的故事

拈花ヽ惹草 提交于 2019-11-30 03:44:12
一个关于国密SM4的故事 https://www.cnblogs.com/ouyida3/p/10053862.htmlSM1 硬件SM2 非对称加密SM3 hash算法SM4 对称加密 一个关于国密SM4的故事 我的名字叫SM4,我还有三位兄长,分别是大哥SM1, 二哥SM2, 和三哥SM3。说起我的名字,故事要回到2006年的时候,我出生的时候并不是叫SM4的,而是叫做SMS4。只是2012年的时候我父亲给我改名了。虽然我起了一个洋气的名字,但我必须郑重地说,我是一个中国人。名字可能只是为了与国际接轨。 我的家族 先简单地介绍一下我的家族,我的父亲是国家密码管理局,我们几兄弟就主要负责起国家信息安全中的加密。我由一出生起,就不断地被家人提醒我要肩负重任。因此,我也非常努力,不断地学习和完善提升自我。 大哥主要负责硬件的加密,不知道是不是因为大哥身为长兄,所以份外地冷酷,他的加密算法和二哥三哥和我都不同,我们的算法都是公开的,但是大哥却埋藏得很深,我们都不知道他的算法是怎样的。 几兄弟里,我和二哥比较亲密,可能是因为他的业务名称和我比较像吧,他主要负责的是非对称加密。我有什么不懂都是经常跑去请教他的。 三哥主要负责哈希算法的。而我,则是负责对称加密。别看我现在说得头头是道,其实一开始我完全不理解这些名词到底是什么意思,于是我首先就走去问二哥。 我是干啥的 我说,二哥

浅谈iterator迭代器模式

十年热恋 提交于 2019-11-30 02:39:51
一、前言 设计模式有很多,最典型的是GoF的23种设计模式,听起来很多,其实大部分我们都是见过的,按照常见度来分,最常用的差不多是六七个吧,因此,我们在学习的时候应该有轻重缓急之分,不能一视同仁,而应该抓住重点,将一些最常用的设计模式吃透了,那么我们在遇到一个实际问题的时候就能根据问题的需要来进行相应的取舍。学习是一个循环往复的过程,没有学过一次不再接触就能掌握的,一定要反复的记忆,反复的练习,不断地提炼,不断地提高,没有复习的学习就是参观,没有预习的学习就是做梦,没有提升的学习就是浪费时间。 二、迭代器模式 什么叫做迭代器,我们可能在C++的STL标准模板库或者在Java中见过iterator这个东西,所谓“迭代”就是按照一定的次序或顺序进行重复操作,这个操作可以是遍历也可以是反复的计算,而迭代器就是按照一定的顺序对元素进行遍历的过程。理解到这个程度,我们可能非常的奇怪,因为我们完全可以使用一个for循环来完成这样的操作,又何必大费周章的来一个迭代器来遍历呢?!这就涉及到软件设计中最重要的一个原则了,那就是高内聚,低耦合。当我们使用for循环来完成遍历操作的时候代码中有着大量的耦合,当我们需要修改代码的时候,不能做到少改甚至不改遍历的代码,而迭代器可以做到,这为代码的可移植性、可扩展性等特性奠定了基础。我们可以看到设计模式大多数是把简单的问题给搞复杂了

day 13总结(闭包函数、装饰器、迭代器)

≡放荡痞女 提交于 2019-11-30 02:00:29
一、闭包函数 1、什么是闭包? 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。 闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。 def outter(): x = 1 def inner(): print(x) return inner f = outter() def f2(): x = 2 f() f2() 1.1 两种函数传参的方式 方式一:参数的形式 def func(x): print(x) func(1) func(1) func(1) 1 1 1 方式二:包给函数 def outter(x): x = 1 def inner(): print(x) return inner f = outter(1) f() f() f() # 查看闭包的元素 print(F"f.__closure__[0].cell_contents: {f.__closure__[0].cell_contents}") 1 1 1 f.__closure__[0].cell_contents: 1 2、闭包函数的应用 闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域。 应用领域:延迟计算(原来我们是传参,现在我们是包起来)、爬虫领域。 import

梯度下降发

筅森魡賤 提交于 2019-11-30 01:34:07
梯度下降法(gradient descent)或最速下降法(steepest descent)是求解无约束最优化问题的一种最常用的方法。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。 假设 f ( x )是 R n 上具有一阶连续偏导数的函数,要求解的无约束最优化问题是 x * 表示目标函数 f ( x )的极小点。 提梯度下降法是一种迭代算法。选取适当的初值 x ( 0) ,不断迭代,更新x值,进行目标函数的极小化,直到收敛。由于负梯度方向是使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新x的值,从而达到减少函数值的目的。 由于 f ( x )具有一阶连续偏导数,若第k次迭代值为 x (k) ,则可将 f ( x )在 x (k) 附近进行一阶展泰勒开: 这里, 为 f ( x )在 x (k) 的梯度。 求出第k+1次迭代值 x (k+1) : 其中, p k 是搜索方向,取负梯度方向 , λ k 是步长,由一维搜索确定,即 λ k 使得: 梯度下降算法如下: 输入:目标函数 f ( x ),梯度函数 ,计算精度 ε ; 输出: f ( x )的极小点 x * (1)取初值x ( 0) ∈ R n ,置 k =0 (2)计算f(x (k) ) (3)计算梯度 g k =g ( x ( k ) ),当|| g k ||< ε 时,停止迭代,令 x * = x k

Python:range 对象并不是迭代器

牧云@^-^@ 提交于 2019-11-29 23:41:35
简评: 迭代器(iterator)是惰性可迭代对象(lazy iterable),range 函数在 Python 3 中是一个惰性的可迭代对象,那么 range 是不是迭代器呢?为什么。 TLNR:Python 3 中的 range 对象(Python 2 中的 xrange 对象)是 lazy 的,但 range 对象却不是迭代器。 是的,这让人很困惑 当谈论 Python 中的迭代器(iterator)和可迭代对象(iterable)时,你很可能会听到有人重复 range 是迭代器的误解。我认为这是非常严重误解, 如果你认为 range 对象是迭代器,那么你关于「迭代器是如何运行」的心智模型还不够清楚。从某种意义上来说,range 和迭代器都是「惰性」的,但它们是以相当不同的方式实现「惰性」的 什么是迭代器(iterator) 在 Python 中,可迭代对象就是你可以迭代的任何东西,而迭代器就是实际迭代的东西。 Iter-ables are able to be iterated over. Iter-ators are the agents that perform the iteration. 可以使用 iter 函数从任何可迭代对象中获取迭代器: 一旦有了迭代器,可以用它做的唯一的事情就是获得它的下一个元素: 如果没有更多的元素了, 则会抛出一个 stop

day07 基础数据类型补充

瘦欲@ 提交于 2019-11-29 23:19:33
目录 day07 基础数据类型补充 今日内容概要 上周内容回顾 今日内容详细 基础数据类型补充 循环删除的坑 二次编码 day07 基础数据类型补充 今日内容概要 基础数据类型 循环删除的坑 二次编码 上周内容回顾 驻留机制 小数据池 数字:-5 ~ 256 字符串:定义和乘法操作时均不能有中文或字符 Python 3.6版本乘法操作结果最大长度为20 Python 3.7版本乘法操作结果最大长度为4096 布尔值 代码块 数字:-5 ~ 正无穷 字符串:乘法操作时均不能有中文或字符,定义时可以有 乘法操作结果最大长度为20 布尔值 代码块的优先级高于小数据池 代码块:一个py文件,一个模块,一个类,一个函数,交互模式下的每一行代码 深浅拷贝 赋值:多个变量名指向同一个内存地址 浅拷贝:只拷贝最外层元素的内存地址 深拷贝:不可变数据共用,可变元素新开辟内存空间 ==:用于判断两边的值是否相等 is:用来判断两边的内存地址是否相同 集合 set,天然去重 集合是一个没有值的字典 集合增加:add,update 集合删除:pop,remove,clear 集合的修改:先删后加,改为其他数据类型 集合的查看:for循环 集合关系: 交集:& 并集:| 差集:- 补集(反差集,对称差集):^ 父集:> 子集:< 今日内容详细 基础数据类型补充 整型 .bit_length

python之路——迭代器和生成器

牧云@^-^@ 提交于 2019-11-29 21:31:19
阅读目录   楔子   python中的for循环   可迭代协议   迭代器协议   为什么要有for循环   初识生成器   生成器函数   列表推导式和生成器表达式   本章小结   生成器相关的面试题 返回顶部 楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几种方式? 首先,我可以通过索引取值l[0],其次我们是不是还可以用for循环来取值呀? 你有没有仔细思考过,用索引取值和for循环取值是有着微妙区别的。 如果用索引取值,你可以取到任意位置的值,前提是你要知道这个值在什么位置。 如果用for循环来取值,我们把每一个值都取到,不需要关心每一个值的位置,因为只能顺序的取值,并不能跳过任何一个直接去取其他位置的值。 但你有没有想过,我们为什么可以使用for循环来取值? for循环内部是怎么工作的呢? 迭代器 返回顶部 python中的for循环 要了解for循环是怎么回事儿,咱们还是要从代码的角度出发。 首先,我们对一个列表进行for循环。 for i in [1,2,3,4]: print(i) 上面这段代码肯定是没有问题的,但是我们换一种情况,来循环一个数字1234试试 for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py",

day4

此生再无相见时 提交于 2019-11-29 21:05:47
阅读目录 函数名的本质 闭包 装饰器 迭代器和生成器 迭代器 生成器函数 生成器表达式 匿名函数 递归函数 内置函数 回到顶部 函数名的本质 函数名本质上就是函数的内存地址 1.可以被引用 def func(): print('in func') f = func print(f) View Code 2.可以被当作容器类型的元素 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') l = [f1,f2,f3] d = {'f1':f1,'f2':f2,'f3':f3} #调用 l[0]() d['f2']() 函数被当作容易类型的元素 3.可以当作函数的参数和返回值 第一类对象(first-class object)指 1.可在运行期创建 2.可用作函数参数或返回值 3.可存入变量的实体。 第一类对象 *不明白?那就记住一句话,就当普通变量用 回到顶部 闭包函数 def func(): name = 'eva' def inner(): print(name) 闭包函数定义: 内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数 #函数内部定义的函数称为内部函数 由于有了作用域的关系,我们就不能拿到函数内部的变量和函数了。如果我们就是想拿怎么办呢?返回呀!