我试图从上一个函数中获取值并在另一个函数中使用。这是我的第一门编程课程和语言,我完全迷路了。 我想好了如何从astlist中获取变量并将它们放到函数距离中,但是现在Python告诉我不能在等式中使用这些变量,因为它们现在在列表中?这就是它的意思吗? 我也只是打印列表看看它们是否在运行。这是我的两个函数,这两个函数都是在我的主函数中定义的。 我会把这些列表放到文件里,但我需要先弄清楚为什么这个方程不起作用。谢谢!
def readast():
astlist = []
for j in range(15):
list1 = []
for i in range(3):
x = random.randint(1,1000)
y = random.randint(1,1000)
z = random.randint(1,1000)
list1.append([x,y,z])
astlist.append(list1)
print(astlist)
return astlist
def distance(astlist):
distlist = []
for row in range(len(astlist)):
x, y, z = astlist[row]
x1 = x**2
y2 = y**2
z2 = z**2
equation = math.sqrt(x+y+z)
distlist.append(equation)
print(distlist)
return distlist
变量
astlist
是一个列表。您多次将list1
添加到其中,这也是一个列表。但你每次都要给list1
添加一个列表:list1.append([x,y,z])
。所以最终astlist
是一个包含多个列表的列表,每个列表都包含一个包含三个整数的列表。所以当你写
x,y,z=astlist[row]
时,变量x
,y
和z
实际上是列表,而不是整数。这意味着您试图计算x**2
,但x
是一个列表,而不是一个数字。这就是为什么Python会给您一条错误消息,因为**
不支持将列表提升为power。我不知道你想用这些列表来完成什么,但是你应该改变代码,这样你只想把数字提高到两个的幂,而不是列表。
我将引用特定的类型错误(type error:upported operand type for**或pow():'list'和'int'),因为某些原因,数组是诸如加法:sum(array)等操作的iterable对象,但是,power:array**2,pow(array,2)。您可以通过以下一些额外步骤来解决此问题:
我也建议使用sum函数
记住这一切是为了避免你提到的错误信息
这样,就可以对数组中的每个元素应用2的幂,从而获得一个新数组,并避免出现请求帮助的错误消息。在我看来,你正在寻找一个规范化的数据使用规范二级,如果这是真的,那么,我认为你错过了一半。
这里有几个问题: 首先,位于
readast()
顶部的循环将list1设置为[]
15次-我不确定您在这里要做什么。如果您试图生成15组x,y,z坐标,那么这是第二个range
-在您的示例中range(3)
-你需要改变。然后继续将[x,y,z]的列表添加到(相同的)list1,然后将list1的整个添加到astlist。但是,Python实际上会将一个指针存储到列表中,而不是将一个副本存储到列表中,因此当您将项添加到list1时,它会将项添加到list1,其中list1包含在另一个列表中: 在本例中,为了清楚起见,随机数被序列号替换(第一个随机数是
1
,第二个是2
,依此类推):第一个循环后:
第二个循环后:
等等
如您所见,list1现在是列表列表,astlist现在是list1的副本列表(列表列表)
列表1可能是多余的,您可能只需要
astlist.append([x,y,z])
在第一点。
在第二个函数中,使用
但事实上,以下情况会更好:
甚至:
当Python中的
for
循环遍历序列(或其他iterable值)的成员时,它就不仅仅是一个简单的计数器。使用range(len(astlist))
构造实际上是生成一个列表[1,2,3…]并对其进行迭代。如果您特别需要一个数字索引,那么可以使用
enumerate
函数,该函数返回一系列(索引、值)对,您可以对这些对进行迭代:希望这有帮助
相关问题 更多 >
编程相关推荐