将值分配给不同的索引位置作为循环中的实际值python
Assign values to different index positions as the actual in a loop python
我有下一个变量,它们是列表、浮点数和一个 numpy 数组。
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
。我制作了这段代码,但它并没有真正有效地工作。
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
您知道如何让它变得更好吗?谢谢!
欢迎使用 Whosebug!
您的代码目前在不需要循环的地方使用了循环,并且在可以使用循环的地方没有使用循环。
单步执行您的代码:
for i in range(0,1):
如果我们将其更改为:
for i in range(0,1):
print (i)
我们将得到结果 0 - 它只运行一次,因此无需循环 - i 在您的代码中未被引用,因此无需循环。
您可以使用循环将 c 分配给数组,但这不是必需的,我将把它留给您自己练习。
它可以通过不同的、更有效的方式来处理。
首先,当您分配变量时,请尝试使它们具有描述性和可读性 - 与阅读代码相比,您将花费更多的时间返回代码。
我不知道你描述的是什么系统,所以我只给出了通用名称:
将 numpy 导入为 np
length_arrary=12
limit=2.75
value_to_be_assigned=18
energy_result=np.zeros(length_arrary)
现在我们真正要问的是两件事,value_to_be_assigned除以极限(整数)多少次,余数是多少。
Python 有两个操作用于此楼层除法 (//) 和模数,它们给出:
11//5 = 2.0
1%5 = 1.0
所以我们知道数组的第一个 (value_to_be_assigned//limit 元素 - 1) 需要等于 limit 而最后一个元素需要等于 value_to_be_assigned % limit
最后 Python 有一种访问列表元素的简单方法 - 我们可以将前 x 个元素设置为等于一个值:
array[:x]=value
x 只需为整数即可。
把它放在一起我们得到:
filled_values=int(value_to_be_assigned//limit)
energy_result[:filled_values]=limit
energy_result[filled_values] = value_to_be_assigned % limit
我们可以用
检查
energy_result.sum() # gives us 18
我有下一个变量,它们是列表、浮点数和一个 numpy 数组。
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
。我制作了这段代码,但它并没有真正有效地工作。
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
您知道如何让它变得更好吗?谢谢!
欢迎使用 Whosebug!
您的代码目前在不需要循环的地方使用了循环,并且在可以使用循环的地方没有使用循环。
单步执行您的代码:
for i in range(0,1):
如果我们将其更改为:
for i in range(0,1):
print (i)
我们将得到结果 0 - 它只运行一次,因此无需循环 - i 在您的代码中未被引用,因此无需循环。
您可以使用循环将 c 分配给数组,但这不是必需的,我将把它留给您自己练习。
它可以通过不同的、更有效的方式来处理。
首先,当您分配变量时,请尝试使它们具有描述性和可读性 - 与阅读代码相比,您将花费更多的时间返回代码。
我不知道你描述的是什么系统,所以我只给出了通用名称:
将 numpy 导入为 np
length_arrary=12
limit=2.75
value_to_be_assigned=18
energy_result=np.zeros(length_arrary)
现在我们真正要问的是两件事,value_to_be_assigned除以极限(整数)多少次,余数是多少。
Python 有两个操作用于此楼层除法 (//) 和模数,它们给出:
11//5 = 2.0
1%5 = 1.0
所以我们知道数组的第一个 (value_to_be_assigned//limit 元素 - 1) 需要等于 limit 而最后一个元素需要等于 value_to_be_assigned % limit
最后 Python 有一种访问列表元素的简单方法 - 我们可以将前 x 个元素设置为等于一个值:
array[:x]=value
x 只需为整数即可。
把它放在一起我们得到:
filled_values=int(value_to_be_assigned//limit)
energy_result[:filled_values]=limit
energy_result[filled_values] = value_to_be_assigned % limit
我们可以用
检查energy_result.sum() # gives us 18