首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python 面试题--3(15题)

Python中的生成器是什么?如何创建一个生成器? 答案:生成器是一种特殊的函数,使用yield语句来生成一个值,并且可以暂停和恢复执行。...生成器可以按需逐个生成值,而不是一次性生成所有值,从而节省内存。 生成器可以通过两种方式创建: 使用生成器函数:生成器函数是一种普通的函数,使用yield语句来生成值。...使用生成器表达式:生成器表达式是一种类似于列表推导式的语法,但返回一个生成器对象而不是列表。生成器表达式使用圆括号而不是方括号。 解释Python中的递归函数及其使用场景。...区别如下: 可迭代对象是一个集合,可以通过迭代器来迭代访问其元素。 迭代器是一个对象,可以在可迭代对象上进行迭代,并逐个返回元素。 可迭代对象可以使用iter()函数来获取迭代器。...当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

6710

2017年对口计算机上机考试,2017年计算机二级VB上机考试答题攻略

2.生成N个不同的随机数 基本思想:将生成的数送入一个数组,每生成一个数后与数组中已有的数比较,如相同则丢弃,重新生成可使用语句Exit For。...4.排序 (1)选择法:每次先找出最小数所在的F标,排序结束后,交换最小数的位置。 (2)冒泡法:两两比较后交换。 (3)合并法:将两个有序的数组合并成一个仃序的数组。...两个数组中的数两两比较,小者放入目标数组,直到.个数组为窄。 (4)插入法:每输入或生成一个数马上插入到数组中使其有序。...7.顺序查找 基本思想:利用循环逐个比较待查找值,找到后退出,一般要使用Exit语句。...8.递归 基本思想:需要解决的问题必须用递归的方式进行描述,才能转变为递归过程,原则上所有的迭代过程都可以使用递归 过程来实现。

42310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环

    squares = (x**2 for x in range(1000000))这行代码创建了一个生成器,可以逐个产生一百万个数的平方,但这些平方并不会同时存在内存中。...NumPy 向量化操作跳进数据科学的大门,怎能不提 NumPy 的向量化操作?在处理数值数据时,这技能简直是利器。基本概念向量化操作指的是直接对数组进行操作,而不是逐个元素进行。...这种方法利用了 NumPy 的内部优化,能显著提升计算速度。用 NumPy 来说,就是把那些通常需要在循环中逐个处理的任务,转换为整体操作,让整个数组一次性处理。...示例代码比如说,我们需要计算两个数组的点积,直接用 NumPy 的向量化方式就可以简洁高效地完成:a = np.array([1, 2, 3])b = np.array([4, 5, 6])# 计算点积...使用像 Python 的 timeit 模块这样的工具来量化不同方法的性能,可以帮助你做出更明智的选择。老铁们,选对工具,事半功倍。

    13000

    数组递归遍历在数据结构和算法中的作用

    什么是数组递归遍历 数组递归遍历是指使用递归算法来遍历数组中的所有元素。递归是一种通过将问题分解为更小的子问题来解决问题的方法。...数组递归遍历的应用 数组递归遍历在许多算法和问题中发挥重要作用,其中包括: 数组元素求和:通过递归遍历数组,可以将数组中的所有元素相加并得到总和。...查找最大/最小值:递归遍历数组并比较元素,可以找到数组中的最大或最小值。 全排列和组合:通过递归遍历,可以生成数组的所有排列或组合。...递归通过函数的递归调用来实现,每次调用处理一个元素,直到遍历完整个数组。迭代使用循环结构,从数组的第一个元素开始逐个处理,直到遍历完整个数组。...定义递归的终止条件,通常是当索引等于数组长度时停止递归。 总结 数组递归遍历在数据结构和算法中是一种重要的操作。它可以应用于多种问题,包括求和、查找、排列组合和树图遍历等。

    16920

    Numpy的广播功能

    数组的计算:广播广播的介绍广播的规则广播的实际应用比较,掩码和布尔逻辑比较操作操作布尔数组将布尔数组作为掩码 《Python数据科学手册》读书笔记 数组的计算:广播 另外一种向量化操作的方法是利用 NumPy...如果两个数组的维度数不同,那么小维度数组的形状将会在最左边补1 如果两个数组的形状在任何一个维度都不匹配,那么数组的形状将会沿着维度为1的维度扩展以匹配另外一个数组的形状 如果两个数组的形状在任何一个维度都不匹配并且没有任何一个维度等于...首先打印出此前生成的二维数组 x: print(x) [[ ] [ ] [ ]] 统计个数 # 有多少个值小于6 np.count_nonzero(x < ) 8 # 也可使用sum...np.any(x > ) True # 有没有值小于0 np.any(x < ) False # 是否所有值小于10 np.all(x < ) True # 是否所有值等于6 np.all(...:逻辑取反 运算符 对应通用函数 & np.bitwise_and np.bitwise_or ~ np.bitwise_not 将布尔数组作为掩码 一种更强大的模式是使用布尔数组作为掩码, 通过该掩码选择数据的子数据集

    1.8K20

    我的Python分析成长之路8

    ))) #生成二行三列全为0的数组 6 print("使用ones函数生成数组:",np.ones((2,3))) #生成二行三列全为一的数组 7 print("使用eye函数生成数组:",np.ones...(3)) #生成对角线上为一的数组 8 print("使用diag函数生成数组:",np.diag([1,2,3,4])) 3.数组的数据类型 在Numpy中,所欲数组的数据类型是同质的,即数组中的所有元素必须是一致的...使用ravel()、flatten()完成展开工作,使用hstack()、vstack() 、concatenate完成组合操作,使用hsplit、vsplit、dsplit、split完成分割操作,可以将数组分割成相同大小的子数组...函数 ufunc函数全称为通用函数,是一种能够对数组中的所有元素(逐元素)进行操作的函数。...、当使用ufunc函数进行数组计算时,ufunc会对两个元素对应元素进行计算。

    1.6K20

    KDD 2020 | Facebook提出组合embedding方法在大规模推荐系统中的应用

    因此提出一种方法,让特征的每个值都有一个独特的embedding于其对应,还可以减少整体embedding的存储大小。...因此提出了quotient-remainder trick方法,使用两个互补函数(整数商和余数函数),可以生成两个单独的embedding table,并以某种方式为每个类别生成唯一的嵌入的方式来组合embedding...生成embedding的另一种方法是为每个分区定义一组不同的转换(第一个embedding table除外)。...特别是,可以使用一个单独的分区来定义一个初始嵌入表,然后通过其他分区确定的函数组合来传递初始嵌入向量。 ? W是embedding table , M是传递函数。这里的传递函数,也一起训练。...内存复杂性的降低还取决于如何定义这些函数以及它们添加了多少附加参数。较小的参数情况下可以与基于操作的组合的空间复杂度相同。

    1.4K20

    JS算法之回溯法

    如果明确知道某些子树没有必要遍历,那么在遍历的时候应该避开这些子树以优化效率。 通常将使用回溯法时避免遍历不必要的子树的方法称为「剪枝」。...在回溯到父节点之前,应该「清除」已经对子集状态进行的修改。subset.pop()「当index等于数组nums的长度时候」,表示数组中的所有数字都已经处理过,因此可以生成一个子集。...例如,当客人走近餐厅准备吃饭,一种点菜的方法就是生成一个符合条件的组合。...避免重复的组合的方法是「当在某一步决定跳过某个值为m的数字时,跳过所有值为m的数字。」为了方便跳过后面所有值相同的数字,可以「将集合中的所有数字排序,把相同的数字放在一起」,这样方便比较数字。...❝ 回溯法都可以使用「递归」的代码实现。递归代码需要先确定「递归退出」的边界条件(基线条件),然后逐个处理集合中的元素。

    1.2K20

    Java8 新特性 —— Stream 流式编程

    流的一个核心好处是:它使得程序更加短小并且易于理解,当结合 Lambda 表达式和方法引用时,会让人感觉自成一体。总而言之,流就是一种高效且易于使用的处理数据的方式。...,相反,它会返回一个持有结果的新流 流可以在不使用赋值或可变数据的情况下对有状态的系统建模 流是一种声明式编程风格,它声明想要做什么,而非指明如何做 流的迭代过称为内部迭代,你看不到迭代过程,可读性更强...跟踪和调试 peek() 操作的目的是帮助调试,它提供了一种对流中所有元素操作的方法,同时提供一个消费函数,对流中元素进行操作,并返回一个新流。...数组 当我们需要得到数组类型的数据以便于后续操作时,可以使用下述方法产生数组: toArray() 将流转换成适当类型的数组 toArray(generetor) 生成自定义类型的数组...组合 组合意味着将流中所有元素以某种方式组合为一个元素 reduce(BinaryOperator) 使用 BinaryOperator 来组合所有流中的元素。

    89330

    根据N种规格中的M种规格值生成的全部规格组合的一种算法

    近来在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组合便是一个型号...这类问题首先考虑的方法是用递归,但返回之间并没有相互依赖的关系,到底什么时候结束是个问题,用嵌套的循环又会由于数组的维度及深度不得而知而变得困难重重,后来,想到了一种很可能并非性能最优,但简单直观的方法...刚开始的时候想到要从多个数组中依次抽取一个元素出来,感觉去进行深度遍历相当复杂,后来换了一种思路,其实每次只要把两个数组合并起来,然后把这两个数组合并的结果再与下个数组进行合并,最终,就能得出逐个抽取一个元素来进行组合的结果...} specValueList.splice(0, 1); arrGroup = generateGroup(specValueList, tempGroup); } } /** * 生成规格值组合的方法...,它主导把数组合并后删除已合并的数组,下面的generateGroup方法则是执行把两个数组合并的请求。

    87610

    【响应式编程的思维艺术】 (3)flatMap背后的代数理论Monad

    -生成可观测序列 range-生成有限的可观测序列 interval-每隔指定时间发出一次顺序整数 distinct-去除出现过的重复值 建议自己动手尝试一下,记住就可以了,有过lodash使用经验的开发者来说并不难...在代码层面需要解决的问题就是,如何在不使用手动遍历的前提下将一个有限序列中的数据逐个发给订阅者,而不是一次性将整个数据集发过去。...var map = curry(function(f, any_functor_at_all) { return any_functor_at_all.map(f); }); /*compose函数组合方法...,它的结构是这样一种形式: io{ __value:io{ __value:someComposedFnExpression } } 如果试图一次性将所有的步骤组合在一起...3.3 Monad登场 当我们看到问题所在后就不难发现,其实这个问题的解决方法并不复杂,我们要做的不过就是在必要的时候合并内容的容器,为此来定义两个合并运算的方法: //链式调用风格 IO.prototype.join

    62220

    深入理解算法与数据结构

    我们将研究线性查找、二分查找、哈希表等不同的查找方法,并了解它们的性能和应用。 线性查找:逐个遍历元素,直到找到目标元素。 二分查找:在有序数组中,每次将搜索范围缩小一半,快速定位目标元素。...哈希表:通过散列函数将元素映射到数组中,快速查找元素。 分治与动态规划 分治和动态规划是解决复杂问题的两种强大方法。我们将深入研究这两种技术,包括它们的基本思想、递归实现和应用示例。...动态规划:将问题拆解为子问题,保存子问题的解,避免重复计算。如斐波那契数列、背包问题。 递归与回溯 递归是一种常见的问题解决方法,而回溯则用于解决组合优化问题。...我们将介绍递归和回溯的基本原理,并通过实例演示如何使用它们解决各种问题,如排列组合、子集生成等。 递归:自身调用解决子问题,通常有递归终止条件。如计算阶乘、二叉树遍历。...回溯:尝试不同的选择,如果不符合条件就回退,继续尝试其他选择。如八皇后问题、组合总和。 贪心算法 贪心算法是一种解决最优化问题的方法,通常用于组合问题和近似算法。

    17530

    深入理解算法与数据结构

    我们将研究线性查找、二分查找、哈希表等不同的查找方法,并了解它们的性能和应用。 线性查找:逐个遍历元素,直到找到目标元素。 二分查找:在有序数组中,每次将搜索范围缩小一半,快速定位目标元素。...哈希表:通过散列函数将元素映射到数组中,快速查找元素。 分治与动态规划 分治和动态规划是解决复杂问题的两种强大方法。我们将深入研究这两种技术,包括它们的基本思想、递归实现和应用示例。...动态规划:将问题拆解为子问题,保存子问题的解,避免重复计算。如斐波那契数列、背包问题。 递归与回溯 递归是一种常见的问题解决方法,而回溯则用于解决组合优化问题。...我们将介绍递归和回溯的基本原理,并通过实例演示如何使用它们解决各种问题,如排列组合、子集生成等。 递归:自身调用解决子问题,通常有递归终止条件。如计算阶乘、二叉树遍历。...回溯:尝试不同的选择,如果不符合条件就回退,继续尝试其他选择。如八皇后问题、组合总和。 贪心算法 贪心算法是一种解决最优化问题的方法,通常用于组合问题和近似算法。

    23340

    Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

    , uniqHLL12函数使用的是HyperLogLog 算法 uniqCombined函数使用三种算法的组合:数组、哈希表和包含错误修正表的HyperLogLog算法 官方推荐:uniq和uniqCombined...,都会逐个去执行SQL,也就意味着二次查询(读两次盘)所以看起来使用With无法避免二次读盘的问题那这里,有没有一次读盘就可以解决这里的问题呢?...,一个该页面所欲请求的用户数第三个需要拆开来看, uniqState是一个物化视图的方法,可以理解成一个AggregateFunction类型的数据的中间状态,这里可以理解基于每个页面都生成了一个数组,...存储对应的用户名单而uniqMerge可以将多个AggregateFunction类型的中间状态组合计算为最终的聚合结果,比如以下两个SQL是等价的:SELECT uniq(UserID) FROM tableSELECT...和 uniqMerge这里可以换成任何以-State和-Merge为后缀的方法回到这个SQL,这里uniqMerge(uniqState(device_id)) OVER () 相当于合并了“基于每个页面都生成的数组

    1.3K92

    Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

    uniq函数使用自适应采样算法, uniqHLL12函数使用的是HyperLogLog 算法 uniqCombined函数使用三种算法的组合:数组、哈希表和包含错误修正表的HyperLogLog算法...,都会逐个去执行SQL,也就意味着二次查询(读两次盘) 所以看起来使用With无法避免二次读盘的问题 那这里,有没有一次读盘就可以解决这里的问题呢?...,一个该页面所欲请求的用户数 第三个需要拆开来看, uniqState是一个物化视图的方法,可以理解成一个AggregateFunction类型的数据的中间状态,这里可以理解基于每个页面都生成了一个数组...,存储对应的用户名单 而uniqMerge可以将多个AggregateFunction类型的中间状态组合计算为最终的聚合结果,比如以下两个SQL是等价的: SELECT uniq(UserID) FROM...相当于合并了“基于每个页面都生成的数组,每个数组存储对应的用户名单”,即访问所有页面的所有用户数 这样就比较优雅的实现了不用with的问题,且这里的性能也是比较快的

    48740

    学习Numpy,看这篇文章就够啦

    因为: 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据 设置专门的数组对象,经过优化,可以提升这类应用的运算速度,在科学计算中,一个维度所有数据的类型往往相同 数组对象采用相同的数据类型,...,每个元素值都是val np.concatenate():将两个或多个数组合并成一个新的数组 3)随机数 Numpy提供了强大的生成随机数的功能,使用随机数也能创建ndarray。...维度 使用ravel方法展平ndarray 使用flatten方法展平ndarray 使用hstack函数实现ndarray横向组合 使用vstack函数实现ndarray纵向组合 使用concatenate...函数组合ndarray 使用dstack函数组合ndarray 使用hsplit函数实现ndarray横向分割 使用vsplit函数实现ndarray纵向分割 使用split函数分割ndarray 使用...03 ufunc ufunc,全称通用函数(universal function),是一种能够对ndarray中所有元素进行操作的函数,而不是对ndarray对象操作。

    1.8K21

    3.0 Python 迭代器与生成器

    通过调用__next__()方法,我们可以逐个访问迭代器中的元素,直到所有元素都被访问完毕,此时再次调用__next__()方法会引发StopIteration异常。...生成器函数使用yield语句返回值,当生成器函数被调用时,它会返回一个生成器对象,通过调用__next__()方法来逐个访问生成器中的元素,直到所有元素都被访问完毕,此时再次调用__next__()方法会引发...此外python中还有一种特殊的迭代器,称为生成器(generator),生成器是一种用简单的方法实现迭代器的方式,使用了yield语句,生成器在执行过程中可以暂停并继续执行,而函数则是一旦开始执行就会一直执行到返回...生成器是一种可以动态生成数据的迭代器,不同于列表等容器类型一次性把所有数据生成并存储在内存中,生成器可以在需要时动态生成数据,这样可以节省内存空间和提高程序效率.使用生成器可以通过for循环遍历序列、...,生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值

    24240

    3.0 Python 迭代器与生成器

    当我们需要处理一个大量的数据集合时,一次性将其全部读入内存并处理可能会导致内存溢出。此时,我们可以采用迭代器Iterator和生成器Generator的方法,逐个地处理数据,从而避免内存溢出的问题。...通过调用__next__()方法,我们可以逐个访问迭代器中的元素,直到所有元素都被访问完毕,此时再次调用__next__()方法会引发StopIteration异常。...生成器函数使用yield语句返回值,当生成器函数被调用时,它会返回一个生成器对象,通过调用__next__()方法来逐个访问生成器中的元素,直到所有元素都被访问完毕,此时再次调用__next__()方法会引发...此外python中还有一种特殊的迭代器,称为生成器(generator),生成器是一种用简单的方法实现迭代器的方式,使用了yield语句,生成器在执行过程中可以暂停并继续执行,而函数则是一旦开始执行就会一直执行到返回...,生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值

    26940

    【教程】实测np.fromiter 和 np.array 的性能

    np.fromiternp.fromiter 是 NumPy 提供的一个函数,用于从可迭代对象(如生成器、列表等)创建一个 NumPy 数组。...它直接从可迭代对象中逐个读取数据,适合在数据量较大或数据生成过程中节省内存的场景。优点:内存效率高:从可迭代对象中逐个读取数据而不是一次性加载所有数据,适合处理大数据量。...此时,数据的处理开销可以忽略不计,所有方法的性能表现几乎相同。np.fromiter 稍慢:在这些小数据量下,np.fromiter 的执行时间稍微比 np.array 长。...避免不必要的列表转换:在处理大数据时,避免将生成器不必要地转换为列表可以显著提高性能。因此,除非必要,尽量使用 np.fromiter 或直接将列表转换为数组,而不是将生成器转换为列表再转为数组。...学长想说 还有一种情况,如果变量aaa已经是tensor了,那么使用aaa.numpy()比以上方法都高效!

    8410

    【Python迭代器探秘】:揭秘迭代器与生成器的魔法,掌握高效循环的艺术

    迭代器对象 迭代器对象是一种可以逐个访问元素的对象,并且只能向前遍历。迭代器对象可以使用 next()函数获取下一个值,如果没有更多的元素,则会引发 StopIteration 异常。...生成器(generator)是 Python 中一种特殊的迭代器,它是一种函数或表达式,可以在运行时逐个产生值,并且只会在需要时进行计算。...生成器函数 生成器函数是一种特殊的 Python 函数,它可以暂停执行并返回中间结果。当调用生成器函数时,它不会立即执行函数体中的所有代码,而是返回一个生成器(generator)对象。...然后,我们可以使用 next() 或 send() 方法逐步迭代该生成器,并在需要时生成新值。 生成器函数可以使用 yield 语句来暂停函数执行并返回中间值。...然后使用 for 循环遍历该生成器并输出每个数字。 生成器是 Python 中一种强大的工具,它们可以逐个生成值,并节省计算和存储空间。

    16810
    领券