首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为循环python中的实际索引位置赋值

为循环python中的实际索引位置赋值
EN

Stack Overflow用户
提问于 2020-01-18 19:43:06
回答 1查看 718关注 0票数 0

我有下一个变量,它们是列表,浮点数和一个数值数组。

代码语言:javascript
运行
复制
dt=list(range(1,12))   
c=18
limit=2.75
Energy=np.zeros(len(dt))  

我想在Numpy数组Energy中赋值为c=18。然而,有一个条件。Energy向量中的值不能大于limit=2.75,因此,由于c=18大于limit=2.75,因此应将其剪切为2.5,并将其分配到循环的实际索引位置和向量Energy的下一个索引位置,直到达到值18。我写了这段代码,但它的效率并不高。

代码语言:javascript
运行
复制
for i in range(0,1): 
    if c>limit:
        tmp2=c-(limit)
        if tmp2>(limit):
            tmp3=tmp2-(limit)
            if tmp3>limit:
                tmp4=tmp3-(limit)
                if tmp4>(limit):
                    tmp5=tmp4-(limit)
                    if tmp5>(limit):
                        tmp6=tmp5-(limit)
                        if tmp6>limit:
                            tmp7=tmp6-(limit)
                            if tmp7>(limit):
                                tmp8=tmp7-(limit)
                            else:
                                Energy[i]=limit
                                Energy[i+1]=limit
                                Energy[i+2]=limit
                                Energy[i+3]=limit
                                Energy[i+4]=limit
                                Energy[i+5]=limit
                                Energy[i+6]=tmp7

你有办法让它变得更好吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-18 20:13:45

欢迎来到stackoverflow!

您的代码目前在不需要循环的地方使用循环,在可以使用的地方也不使用循环。

单步执行您的代码:

代码语言:javascript
运行
复制
for i in range(0,1): 

如果我们将其更改为:

代码语言:javascript
运行
复制
for i in range(0,1): 
    print (i)

我们将得到结果0-它只运行一次,所以没有必要循环它-在你的代码中没有引用i,所以没有必要遍历它。

您可以使用循环将c分配给数组,但这并不是必需的,我将把它留给您自己作为练习。

它可以用一种不同的、更有效的方式来处理。

首先,当你赋值变量时,试着让它们具有描述性和可读性--你会花更多的时间回到代码上,而不是阅读它。

我不知道您描述的是什么系统,所以我只给出了通用名称:

将numpy导入为np

代码语言:javascript
运行
复制
length_arrary=12

limit=2.75

value_to_be_assigned=18

energy_result=np.zeros(length_arrary)

现在我们真正要问的是两件事,value_to_be_assigned除以极限(整数)的次数和余数是多少。

Python对这个地板分割(//)和模数有两个操作,这两个操作给出:

代码语言:javascript
运行
复制
11//5 = 2.0
1%5   = 1.0

因此我们知道数组的第一个元素( value_ to _ be _assigned //limit elements - 1)需要等于limit,而最后一个元素需要等于value_to_be_assigned% limit

最后,Python有一种简单的方法来访问列表中的元素-我们可以使用以下命令将前x个元素设置为等于一个值:

代码语言:javascript
运行
复制
array[:x]=value

X只需要是一个整数。

把它们放在一起,我们得到:

代码语言:javascript
运行
复制
filled_values=int(value_to_be_assigned//limit)

energy_result[:filled_values]=limit

energy_result[filled_values] = value_to_be_assigned % limit

我们可以检查一下

代码语言:javascript
运行
复制
energy_result.sum() # gives us 18
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59800255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档