本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:幽默盒子,一个专注于搞笑,分享快乐的公众号

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何减少循环

发布于2021-07-29 13:28     阅读(1078)     评论(0)     点赞(7)     收藏(3)



我想知道是否有任何可能的方法来减少 python 中的循环?我在很多网站上搜索过,但没有找到任何有用的东西。例如,我在考虑这个简单的函数:

def fun():
    colors = ["red", "grn", "blu", "prpl"]
    i = 0
    while 4 > i >= 0:
        for i, r in enumerate(colors):
            us = input("Enter your color\n")
            if us == 'red':
                i += 1
                print("r:", r)
            else:
                print("sorry, no", us, "enter the color again")
                i -= 1

如果输入等于'red'增加i,否则减少它。然后我注意到 in/decrementi无论如何都不会影响i如果输入不是,我该如何递减'red'

编辑:对不起,我的问题不清楚。程序正在迭代列表colors,一旦us不等于red程序必须递减i下面是所需的输出示例,我希望现在很清楚。

所需的输出示例:

Enter your color
red
r: red

Enter your color
red
r: grn

Enter your color
r
sorry, no r enter the color again
Enter your color
red
r: grn


解决方案


顺便说一句,您在问题中的代码正在更新i. 但是i每次迭代都会重新分配枚举器生成的当前值。

...     i = 0
...     while 4 > i >= 0:
...         for i, r in enumerate(colors):

让我们关注代码中的两个循环。最外面的while循环看起来不错。i为了继续循环,您需要保留一系列值伟大的。

在内部循环中,您使用enumerate()来创建一个生成元组序列的生成器:(0, 'red'), (1, 'grn'), (2, 'blu'), (3, 'prpl') 在同一语句中,您i使用每个元组中的数值和r颜色进行分配

每次通过内部循环时,i都是一个 0 到 3 的值,'r' 是一种颜色(从不用于任何东西)。的值i,并r会被设置为在每次迭代列表中的下一个元组,不管你是什么分配给它们的循环中

您可能实际上可以摆脱内部 for 循环,并且您的程序仍然可以运行。如果没有内部循环,您将一直循环直到i超出范围。

但是,因为您有一个内部循环,所以您的迭代次数乘以enumerate()生成的元组数因此,假设外循环循环了 4 次,由于该内循环,您将不得不回答输入问题 4(外)* 4(内)= 16 次。

您应该考虑仅使用一个循环重新实现 - 没有内部循环。

所以,问题是,“你如何减少 python 中的循环。” 如果您想向后计数,请执行此操作 - 或使用 while 循环对 i 进行更多控制:

>>> for i in range(10, 0, -1):
...     print(i)

因此,根据注释线程,forPython 中循环会for以指定的可预测顺序语句中指定的值进行迭代

如果您想i迭代 1 到 100 之间的整数值,但每次通过循环增加 2,您可以将其编码为:

for i in range(1, 100, 2):

但是,如果您想i根据循环内的代码以不同的方式进行更改,这将更合适:

i = 0
while i < 20:
    i += 1
    ri = random.randint(0 , 5)
    if ri == 2:
        i += 2
    elif ri == 3:
        i -= 1
    elif ri = 0:
        break;

所以变量i很容易被循环中的代码动态更新。在这种情况下,语法与 C 不同。您还可以使用breakas in C强制 Python 循环跳出循环- 这是在它开始后更改序列的一种方法。

for 循环依赖于生成器或迭代器为它提供一个新项目(或多个项目),它可以在每次循环中分配给循环变量(或变量)。一旦开始运行,生成器或迭代器就会提供它被配置/编码生成的每个顺序项。在循环开始后,您无法将其备份或更改其增量。你承诺了。

生成器对象的一个​​很好的例子是range(0, 10, 2). 这实际上不是生成器——它在循环开始时返回一个生成器。并且 for 循环向这个生成器询问每个下一个值,直到它达到它的极限。

迭代器的一个很好的例子是:

>>> for foo in ['the', 'quick', 'fox']:
...     print(foo)

列表不是迭代器 - 一个是为列表隐式创建的。此迭代器将按照给定的顺序生成列表中的每个项目,直到项目用完为止。

所以,正如我所说,一旦 for 循环开始进行,它所经历的值几乎是预先确定的......直到今天......=)我必须明确这一点:以下代码只是“为了好玩”。不要为您的项目编写这样的代码。

在下面的循环中,variable_indices()生成一个生成器。

>>> import random
>>> variable_index = 0
>>>
>>> def variable_indices(min, max, step):
...     global variable_index
...     variable_index = min
... 
...     while variable_index >= min and variable_index < max:
...         variable_index += step
...         print(f"variable_indices() producing value: {variable_index}")
...         yield variable_index
...         
>>> for i in variable_indices(0, 10, 1):
... 
...     if random.randint(0, 2) == 2:
...         print("updating variable_index -= 1")
...         variable_index -= 1
...         
variable_indices() producing value: 1
variable_indices() producing value: 2
updating variable_index -= 1
variable_indices() producing value: 2
updating variable_index -= 1
variable_indices() producing value: 2
variable_indices() producing value: 3
variable_indices() producing value: 4
variable_indices() producing value: 5
updating variable_index -= 1
variable_indices() producing value: 5
variable_indices() producing value: 6
variable_indices() producing value: 7
updating variable_index -= 1
variable_indices() producing value: 7
variable_indices() producing value: 8
variable_indices() producing value: 9
variable_indices() producing value: 10

variable_indices should, as any generator, render values in a predictable progression. But in this case I did a bad thing and made its internal state depend on a global variable - which I then modify within the loop. I guess this could serve to demonstrate that it's not straightforward to do this sort of thing, and therefore you shouldn't =)






所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1006068/6e40db242dabf7758a74/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)