Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >2021-09-26:搜索旋转排序数组。整数数组 nums 按升序排列,数组中的值 互不相同 。在?

2021-09-26:搜索旋转排序数组。整数数组 nums 按升序排列,数组中的值 互不相同 。在?

提问于 2021-09-25 23:23:45
回答 0关注 0查看 111

2021-09-26:搜索旋转排序数组。整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。力扣33。

已邀请
等4人回答

回答 2

Bilibili科技

发布于 2017-12-26 04:01:14

迭代器:

Iterator are objects which uses next() method to get next value of sequence.

生成器:

A generator is a function that produces or yields a sequence of values using yield method.

Every next() method call on generator object(for ex: f as in below example) returned by generator function(for ex: foo() function in below example), generates next value in sequence.

When a generator function is called, it returns an generator object without even beginning execution of the function. When next() method is called for the first time, the function starts executing until it reaches yield statement which returns the yielded value. The yield keeps track of i.e. remembers last execution. And second next() call continues from previous value.

The following example demonstrates the interplay between yield and call to next method on generator object.

代码语言:txt
AI代码解释
复制
>>> def foo():
代码语言:txt
AI代码解释
复制
...     print "begin"
代码语言:txt
AI代码解释
复制
...     for i in range(3):
代码语言:txt
AI代码解释
复制
...         print "before yield", i
代码语言:txt
AI代码解释
复制
...         yield i
代码语言:txt
AI代码解释
复制
...         print "after yield", i
代码语言:txt
AI代码解释
复制
...     print "end"
代码语言:txt
AI代码解释
复制
...
代码语言:txt
AI代码解释
复制
>>> f = foo()
代码语言:txt
AI代码解释
复制
>>> f.next()
代码语言:txt
AI代码解释
复制
begin
代码语言:txt
AI代码解释
复制
before yield 0            # Control is in for loop
代码语言:txt
AI代码解释
复制
0
代码语言:txt
AI代码解释
复制
>>> f.next()
代码语言:txt
AI代码解释
复制
after yield 0             
代码语言:txt
AI代码解释
复制
before yield 1            # Continue for loop
代码语言:txt
AI代码解释
复制
1
代码语言:txt
AI代码解释
复制
>>> f.next()
代码语言:txt
AI代码解释
复制
after yield 1
代码语言:txt
AI代码解释
复制
before yield 2
代码语言:txt
AI代码解释
复制
2
代码语言:txt
AI代码解释
复制
>>> f.next()
代码语言:txt
AI代码解释
复制
after yield 2
代码语言:txt
AI代码解释
复制
end
代码语言:txt
AI代码解释
复制
Traceback (most recent call last):
代码语言:txt
AI代码解释
复制
  File "<stdin>", line 1, in <module>
代码语言:txt
AI代码解释
复制
StopIteration
代码语言:txt
AI代码解释
复制
>>>

罗斯魂丶

发布于 2017-12-26 03:54:24

iterator is a more general concept: any object whose class has a next method (__next__ in Python 3) and an __iter__ method that does return self.

Every generator is an iterator, but not vice versa. A generator is built by calling a function that has one or more yield expressions (yield statements, in Python 2.5 and earlier), and is an object that meets the previous paragraph's definition of an iterator.

You may want to use a custom iterator, rather than a generator, when you need a class with somewhat complex state-maintaining behavior, or want to expose other methods besides next (and __iter__ and __init__). Most often, a generator (sometimes, for sufficiently simple needs, a generator expression) is sufficient, and it's simpler to code because state maintenance (within reasonable limits) is basically "done for you" by the frame getting suspended and resumed.

For example, a generator such as:

代码语言:txt
AI代码解释
复制
def squares(start, stop):
代码语言:txt
AI代码解释
复制
    for i in range(start, stop):
代码语言:txt
AI代码解释
复制
        yield i * i
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
generator = squares(a, b)

or the equivalent generator expression (genexp)

代码语言:txt
AI代码解释
复制
generator = (i*i for i in range(a, b))

would take more code to build as a custom iterator:

代码语言:txt
AI代码解释
复制
class Squares(object):
代码语言:txt
AI代码解释
复制
    def __init__(self, start, stop):
代码语言:txt
AI代码解释
复制
       self.start = start
代码语言:txt
AI代码解释
复制
       self.stop = stop
代码语言:txt
AI代码解释
复制
    def __iter__(self): return self
代码语言:txt
AI代码解释
复制
    def next(self):
代码语言:txt
AI代码解释
复制
       if self.start >= self.stop:
代码语言:txt
AI代码解释
复制
           raise StopIteration
代码语言:txt
AI代码解释
复制
       current = self.start * self.start
代码语言:txt
AI代码解释
复制
       self.start += 1
代码语言:txt
AI代码解释
复制
       return current
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
iterator = Squares(a, b)

But, of course, with class Squares you could easily offer extra methods, i.e.

代码语言:txt
AI代码解释
复制
    def current(self):
代码语言:txt
AI代码解释
复制
       return self.start

if you have any actual need for such extra functionality in your application.

和开发者交流更多问题细节吧,去 写回答
相关文章
Python中迭代器和生成器的区别?
小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。
程序员小猿
2021/01/19
1.7K0
Python_生成器和迭代器的区别
迭代器和生成器的区别是什么?这个问题面试的时候经常作为灵魂拷问。今天一起从概念到代码梳理一遍,作为总结和记录。
钢铁知识库
2022/08/20
2910
Python中迭代器和生成器的区别及生成器的原理
在Python编程语言中,迭代器和生成器是非常重要的概念。它们都提供了一种有效的方式来处理序列化的数据,但它们之间有一些区别。本文将详细介绍Python中迭代器和生成器的区别,并解释生成器的原理。我们将通过代码示例和详细的解释来帮助读者理解这些概念。
疯狂的KK
2023/08/03
5050
Python中迭代器和生成器的区别及生成器的原理
生成器、迭代器的区别?
迭代器是一个更抽象的概念,任何对象,如果它的类有 next 方法和 iter 方法返回自己本身,对于 string、list、 dict、tuple 等这类容器对象,使用 for 循环遍历是很方便的。在后台 for 语句对容器对象调用 iter()函数,iter() 是 python 的内置函数。iter()会返回一个定义了 next()方法的迭代器对象,它在容器中逐个访问容器内元素,next() 也是 python 的内置函数。在没有后续元素时,next()会抛出一个 StopIteration 异常。
py3study
2020/01/19
6820
python的迭代器和生成器
迭代是数据处理的基础,迭代可以理解为是一种惰性求值。在python里迭代器和生成器是一回事,使用的是yield关键字。
哒呵呵
2018/08/06
4010
python 迭代器/iterator与生成器/generator的区别
可以看到,i和g是不同类的实例,拥有的属性也不同,虽然都可以使用next方法取值,但是i可以序列化,g不可以序列化,说明g的值是运行时动态生成,而i值是固定生成
未来sky
2020/09/29
5690
Python 迭代器和生成器-反向迭代
反向迭代仅仅当对象的大小可预先确定或者对象实现了 __reversed__() 的特殊方法时才能生效。 如果两者都不符合,那你必须先将对象转换为一个列表才行,比如:
用户7886150
2021/01/21
5160
python中的生成器和迭代器
然而迭代却不仅仅是for循环那么简单,在python中,迭代可以称得上最强大的功能之一。首先来看下迭代器的概念, 迭代器本质是一个对象,用于遍历元素,从元素的第一个位置开始,遍历到最后一个位置,通过iter方法可以将普通的sequence对象转换为迭代器,用法如下
生信修炼手册
2020/05/28
9230
Python 迭代器和生成器
本文介绍了Python迭代器和生成器的概念、用法和示例,以及itertools模块提供的一系列迭代器。生成器是一种特殊的迭代器,内部支持了生成器协议,不需要明确定义__iter__()和next()方法。生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果。在Python 2.5中,yield语句变成了yield表达式,可以有一个值。在生成器中,每次调用next()方法,就会返回下一个值。生成器还支持send()方法,用于主动推送一个值。在Python 3.x中,send()方法被移除,可以使用next()方法代替。生成器还支持close()方法,用于关闭生成器,关闭后无法使用send()和next()方法,但可以继续使用__iter__()和__next__()方法。生成器是一种强大的编程工具,可以有效地节省内存和提高代码性能,特别是在处理大量数据时。itertools模块提供了一系列迭代器,包括旋转、组合、笛卡尔积等,可以用于简化复杂的循环和算法。总之,迭代器和生成器是Python中非常重要的概念,可以简化很多繁琐的编程任务,提高代码性能和可读性。
企鹅号小编
2018/01/05
7220
Python 迭代器和生成器
Python迭代器和生成器
Python的迭代器集成在语言之中,迭代器和生成器是Python中很重要的用法,本文将深入了解迭代器和生成器。
oYabea
2020/09/07
4540
python迭代器和生成器
1.经典迭代器 import re RE_WORD = re.compile('\w+') class Sentence: def __init__(self, text): self.text = text self.words = RE_WORD.findall(text) def __iter__(self): # <1> return SentenceIterator(self.words) # <2> class
py3study
2020/01/20
3040
Python迭代器和生成器
迭代器 (iterator): 如果一个对象同时有__iter__()和__next__()魔术方法的话,这个对象就可以称为是迭代器。__iter__()的作用是可以让for循环遍历。而__next__()方法是让对象可以通过 next(实例对象) 的方式访问下一个元素,通常从序列第一个元素开始访问,直到所有的元素都被访问才结束。
王大力测试进阶之路
2020/07/23
3770
Python生成器和迭代器
 1、生成器  通过列表生成式,我们可以直接创建一个列表。但是,受到内存的限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占有很大的存储空间,如果我们仅仅访问前面几个元素,那后面绝大元素占用的空间都白白浪费。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素?这样就不必须创建完整的list,从而节省大量的空间。在Python中,这样一边循环一边计算的机制,称为生成器:generator。 要创建一个generator有很多种方法。第一个方法很
用户1173509
2018/01/17
6440
Python生成器和迭代器
Python迭代器和生成器
这里有个关于生成器的创建问题面试官有考: 问: 将列表生成式中[]改成() 之后数据结构是否改变? 答案:是,从列表变为生成器
宇宙之一粟
2022/05/13
2180
python生成器和迭代器
第二,本次迭代的要依赖上一次的结果继续往下做,如果中途有任何停顿,都不能算是迭代。
用户7886150
2020/11/30
4910
Python迭代器和生成器
比如:列表[0,1,2],元组(1,2,3),字典{’0:'0','1':"1'} 集合{1,2,3}都是容器
润森
2020/05/14
3210
Python中的迭代器和生成器介绍
迭代器是Python中用于遍历数据集合的一种机制。它是一个实现了迭代协议的对象,可以通过iter()函数来获得迭代器。迭代器需要实现两个方法:__iter__()和__next__()。其中,__iter__()返回迭代器自身,而__next__()返回序列中的下一个元素。当没有元素可以返回时,__next__()应该引发StopIteration异常,表示迭代结束。当我们处理数据集合时,往往需要逐个访问其中的元素,这时就需要用到迭代器(Iterators)。
小博测试成长之路
2023/09/12
2440
Python中的迭代器和生成器介绍
python生成器迭代器区别,range与xrange区别,yield
迭代器:迭代就是循环。迭代器是可以被next() 函数调用并不断返回下一个值的对象称为迭代器。
用户7886150
2020/12/19
7500
Python中神奇的迭代器和生成器
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
快学Python
2021/08/09
5830
点击加载更多

相似问题

\ n和\ r之间的区别?

2497

malloc和calloc之间的区别?

2415

map和Ruby之间的区别?

2374

PostgreSQL:文本和varchar之间的区别?

22.5K

在SQL中EXISTS和IN之间的区别?

2445
相关问答用户
某公司 | 程序员擅长1个领域
新浪微博 | 高级总监擅长4个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档