Python 嵌套for循环中的追加列表
我定义了一些数据,这些数据附加到一些列表中。为了做到这一点,我需要将它们放入某种嵌套循环条件中。首先创建一个介于1-15之间的范围,然后rebarnumber计算,在循环中,我在Python 嵌套for循环中的追加列表,python,python-3.x,list,for-loop,Python,Python 3.x,List,For Loop,我定义了一些数据,这些数据附加到一些列表中。为了做到这一点,我需要将它们放入某种嵌套循环条件中。首先创建一个介于1-15之间的范围,然后rebarnumber计算,在循环中,我在n=rebarnumber执行其他操作时设置这些条件。问题是,当上述条件完全满足时,我只需要得到包含完整范围数的列表 但是却得到了这个结果。 [49.0] 1 [49.0, 49.0] 2 [49.0, 49.0, 49.0] 3 [49.0, 49.0, 49.0, 49.0] 4 [49.0, 49.0, 49.0,
n=rebarnumber
执行其他操作时设置这些条件。问题是,当上述条件完全满足时,我只需要得到包含完整范围数的列表
但是却得到了这个结果。
[49.0] 1
[49.0, 49.0] 2
[49.0, 49.0, 49.0] 3
[49.0, 49.0, 49.0, 49.0] 4
[49.0, 49.0, 49.0, 49.0, 49.0] 5
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0] 6
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0] 7
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0] 8
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 9
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 10
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 11
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 12
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 13
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 14
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 15
所需结果(仅显示最后两行打印内容)
代码:
h = 300
cb = 35
ct = 35
ca = 35
b= 300
y = 12
d = h - cb
ds = ct
a = 25
yb = 8
rebarnumber = math.floor((b-(2*cb+2*yb+y))/a)
disc = []
dis = []
Asi = []
Asci = []
for n in range(1,16):
if n <= rebarnumber+1:
Asi.append(int(3.1416/4*(y)**2))
dis.append( h - (cb + yb + y/2 ))
Asci.append(int(3.1416/4*(y)**2))
disc.append( ct + yb + y/2 )
if n >= rebarnumber:
Asi.append(int(3.1416/4*(y)**2))
dis.append( h - (cb + yb + y/2 ) - ca)
Asci.append(int(3.1416/4*(y)**2))
disc.append( cb + yb + y/2 + ca)
print(disc, n)
h=300
cb=35
ct=35
ca=35
b=300
y=12
d=h-cb
ds=ct
a=25
yb=8
rebarnumber=数学楼层((b-(2*cb+2*yb+y))/a)
光盘=[]
dis=[]
Asi=[]
Asci=[]
对于范围(1,16)内的n:
如果n=重新编号:
附加说明(int(3.1416/4*(y)**2))
dis.append(h-(cb+yb+y/2)-ca)
附件(int(3.1416/4*(y)**2))
光盘附加(cb+yb+y/2+ca)
打印(光盘,n)
我做错了什么?!任何帮助 您的代码中有两个棘手的问题。让我们先把它们清理干净
显然,您已经导入了math
,因为您正在使用math.floor
。为什么不用math.pi
代替3.1416?而且,既然它是一个常量,为什么不使用标准的PEP8命名约定呢?此外,为什么不使用:
import math
# ...
PI_Y2_4 = int((math.pi * y ** 2) / 4)
有几个“公共子表达式”可以存储为变量。因为在示例代码中,它们看起来是常量,所以您甚至可以将它们设置为常量。但即使它们在实际代码中不是常数,您也可以通过只计算一次来获得清晰性、避免错误并提高速度:
for n in range(1, 16):
cbyby_2 = cb + yb + y / 2
ctyby_2 = ct + yb + y / 2
if n <= rebarnumber+1:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2)
disc.append(ctyby_2)
if n >= rebarnumber:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2 - ca)
disc.append(cbyby_2 + ca)
也就是说每次都会出现print
语句,但是只有在第一个if
语句通过时才会调用append
方法。此外,由于第二条if
语句包含在第一条if
语句中,因此当该语句通过时,您将向每个列表追加两次
显然,这不是你想要的。相反,我怀疑您正在尝试一种if/else
系列,其中一组行为最多涉及8或9,然后另一组行为接管
既然你在评论中提到了else
,我猜这是一个家庭作业,或者你还没有学过else
在这种情况下,您需要确保您的条件彼此直接相反!最简单的方法是使用而不是。(注意两个if
语句缩进的金额相同!第二个if
语句不包含在第一个语句中。):
在你的代码中有一些尴尬的事情。让我们先把它们清理干净
显然,您已经导入了math
,因为您正在使用math.floor
。为什么不用math.pi
代替3.1416?而且,既然它是一个常量,为什么不使用标准的PEP8命名约定呢?此外,为什么不使用:
import math
# ...
PI_Y2_4 = int((math.pi * y ** 2) / 4)
有几个“公共子表达式”可以存储为变量。因为在示例代码中,它们看起来是常量,所以您甚至可以将它们设置为常量。但即使它们在实际代码中不是常数,您也可以通过只计算一次来获得清晰性、避免错误并提高速度:
for n in range(1, 16):
cbyby_2 = cb + yb + y / 2
ctyby_2 = ct + yb + y / 2
if n <= rebarnumber+1:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2)
disc.append(ctyby_2)
if n >= rebarnumber:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2 - ca)
disc.append(cbyby_2 + ca)
也就是说每次都会出现print
语句,但是只有在第一个if
语句通过时才会调用append
方法。此外,由于第二条if
语句包含在第一条if
语句中,因此当该语句通过时,您将向每个列表追加两次
显然,这不是你想要的。相反,我怀疑您正在尝试一种if/else
系列,其中一组行为最多涉及8或9,然后另一组行为接管
既然你在评论中提到了else
,我猜这是一个家庭作业,或者你还没有学过else
在这种情况下,您需要确保您的条件彼此直接相反!最简单的方法是使用而不是。(注意两个if
语句缩进的金额相同!第二个if
语句不包含在第一个语句中。):
这取决于你想发生什么。你展示了你不想要的,但没有清楚地描述你想要的。你能展示你想要的输出吗?您尝试调试了吗?您提到了嵌套循环,但只有一个循环。请参阅我的更新图像如果
阻止一个级别(并可能调整条件),您可能必须取消第二个。我想更改条件,否则语句将不在此处使用。但我想保持简单,这取决于你想发生什么。你展示了你不想要的,但没有清楚地描述你想要的。你能展示你想要的输出吗?您尝试调试了吗?您提到了嵌套循环,但只有一个循环。请参阅我的更新图像如果
阻止一个级别(并可能调整条件),您可能必须取消第二个。我想更改条件,否则语句将不在此处使用。但我想保持简单。你的解释和解决方案是优秀的和教学性的。这解决了我的问题,还有更多。。。。非常感谢您的帮助。您的解释和解决方案非常好,而且具有教育意义。这解决了我的问题,还有更多。。。。非常感谢你的帮助。
for n in ...:
...
low_rebar = (n <= rebarnumber + 1)
if low_rebar:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2)
disc.append(ctyby_2)
if not low_rebar:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2 - ca)
disc.append(cbyby_2 + ca)
print(disc, n)
if n <= rebarnumber + 1:
...
if not (n <= rebarnumber + 1):
...
if n > rebarnumber + 1: