Python中的嵌套For循环(计算三角形的周长)
我想计算三角形的周长。我想访问列表的具体元素,所以我使用嵌套for循环。1. 我想知道为什么周长的位置使我的代码在这两种变体中有所不同。在第二个例子中,我不明白为什么输出是240 2我想知道如何连接嵌套列表中的所有项目,因此输出应该是这样的:我尝试使用索引,但没有成功Python中的嵌套For循环(计算三角形的周长),python,python-3.x,Python,Python 3.x,我想计算三角形的周长。我想访问列表的具体元素,所以我使用嵌套for循环。1. 我想知道为什么周长的位置使我的代码在这两种变体中有所不同。在第二个例子中,我不明白为什么输出是240 2我想知道如何连接嵌套列表中的所有项目,因此输出应该是这样的:我尝试使用索引,但没有成功 60 150 240 第一: def function(triangle): perimeter = 0 for i in triangle: for j in i: pe
60
150
240
第一:
def function(triangle):
perimeter = 0
for i in triangle:
for j in i:
perimeter = perimeter + j
return perimeter
function([[10,20,30], [40,50,60], [70,80,90]])
450
第二点:
def function(triangle):
for i in triangle:
perimeter = 0
for j in i:
perimeter = perimeter + j
return perimeter
function([[10,20,30], [40,50,60], [70,80,90]])
240
1-两个代码之间的区别在于,在第一个代码中,周长在循环开始之前设置为0,然后在整个循环中更新。在第二个循环中,每次执行外部循环时都将周长值设置为0,因此上一个循环中的值不会在其中累积 2-对于循环,您可以使用以下方法:
triangles = [[10,20,30], [40,50,60], [70,80,90]]
perimeters = list(map(sum,triangles))
print(perimeters)
[60, 150, 240]
在这里,map迭代三角形的元素,并为每个元素调用sum函数。然后,使用列表可以将其转换为周长值列表。1-两个代码之间的区别在于,在第一个代码中,周长在循环开始之前设置为0,然后在整个循环中更新。在第二个循环中,每次执行外部循环时都将周长值设置为0,因此上一个循环中的值不会在其中累积 2-对于循环,您可以使用以下方法:
triangles = [[10,20,30], [40,50,60], [70,80,90]]
perimeters = list(map(sum,triangles))
print(perimeters)
[60, 150, 240]
在这里,map迭代三角形的元素,并为每个元素调用sum函数。然后,使用list可以将其转换为周长值列表。看起来您希望返回提供给函数的每个三角形的周长 这几乎可以用python直接表示:
def get_perimeters(triangles):
return [sum(perimeters) for perimeters in triangles]
print(get_perimeters([[10,20,30], [40,50,60], [70,80,90]]))
输出:
[60, 150, 240]
看起来您希望返回提供给函数的每个三角形的周长 这几乎可以用python直接表示:
def get_perimeters(triangles):
return [sum(perimeters) for perimeters in triangles]
print(get_perimeters([[10,20,30], [40,50,60], [70,80,90]]))
输出:
[60, 150, 240]
在第一个示例中,由于在开始循环通过任何三角形之前将周长设置为零,因此计算所有列出三角形的总周长 在第二个示例中,通过在外环内移动周长=0,您将在计算第一个三角形后丢弃该三角形的总数,然后在再次计算第三个三角形之前丢弃第二个三角形的总数 我会像这样重新编写您的代码:
def perimeters(geom):
for triangle in geom:
yield sum(triangle)
现在您有了一个生成器,您可以循环使用它,或者将其转换为列表,或者将其传递给map、filter等函数
for perimeter in perimeters([[10,20,30], [40,50,60], [70,80,90]])
print(perimeter)
使用生成器的好处是,它可以在需要时计算数据,而不是预先进行所有计算。在第一个示例中,由于在开始循环通过任何三角形之前将周长设置为零,因此可以计算所有列出三角形的总周长 在第二个示例中,通过在外环内移动周长=0,您将在计算第一个三角形后丢弃该三角形的总数,然后在再次计算第三个三角形之前丢弃第二个三角形的总数 我会像这样重新编写您的代码:
def perimeters(geom):
for triangle in geom:
yield sum(triangle)
现在您有了一个生成器,您可以循环使用它,或者将其转换为列表,或者将其传递给map、filter等函数
for perimeter in perimeters([[10,20,30], [40,50,60], [70,80,90]])
print(perimeter)
使用生成器的好处是,它可以在您需要时计算数据,而不是预先进行所有计算。将所有周长作为列表返回的次要修复
def function(triangle):
perimeter_list = []
for i in triangle:
perimeter = 0
for j in i:
perimeter = perimeter + j
perimeter_list.append(perimeter)
return perimeter_list
function([[10,20,30], [40,50,60], [70,80,90]])
输出
[60, 150, 240]
将所有周界作为列表返回的次要修复
def function(triangle):
perimeter_list = []
for i in triangle:
perimeter = 0
for j in i:
perimeter = perimeter + j
perimeter_list.append(perimeter)
return perimeter_list
function([[10,20,30], [40,50,60], [70,80,90]])
输出
[60, 150, 240]
我已经编辑了您的示例,以纠正明显的缩进错误-如果修订不正确,您应该修复它。。。第一个示例生成一个异常:NameError:未定义名称“geom”。您是否使用具有调试功能的IDE?如果是这样的话,现在是熟悉它们的绝佳时机。或者花一些时间学习内置的。在战略点打印内容通常有助于跟踪执行情况。还有一些在线可视化工具,如So抱歉疏忽!我的错误。我编辑了你的例子来纠正明显的缩进错误-如果修订不正确,你应该修复它。。。第一个示例生成一个异常:NameError:未定义名称“geom”。您是否使用具有调试功能的IDE?如果是这样的话,现在是熟悉它们的绝佳时机。或者花一些时间学习内置的。在战略点打印内容通常有助于跟踪执行情况。还有一些在线可视化工具,如So抱歉疏忽!我的错误。