Python中的嵌套For循环(计算三角形的周长)

时间:2020-06-21 14:18:42

标签: python python-3.x

我想计算三角形的周长。我想访问列表的具体元素,所以我在使用嵌套的for循环。 1) 我想知道为什么#include <stdio.h> #include <string.h> int main() { char org[] = "Cats,Dogs,Mice,,,Dwarves,Elves:High,Elves:Wood"; char *token = strtok(org, ","); while (token != NULL) { printf("Token: %s\n", token); token = strtok(NULL, ","); } } 的位置使我的代码在两个变体中都不同。 (在第二个中,我不明白为什么输出为240) 2)我想知道如何连接嵌套列表中的所有项目,因此输出应为:(我尝试使用索引编制,但没有用)

perimeter

第一个:

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

4 个答案:

答案 0 :(得分:4)

1-两种代码之间的区别在于,在循环开始前的第一个perimeter中将其设置为0,然后在整个循环中进行更新。在第二个循环中,每次执行外部循环时,都将perimeter的值设置为0,这样就不会在其中累积前一个循环的值。

2-对于循环,可以使用以下方法:

triangles = [[10,20,30], [40,50,60], [70,80,90]]
perimeters = list(map(sum,triangles))
print(perimeters)
[60, 150, 240]

在这里,map遍历triangles的元素,并为每个元素调用sum函数。然后,使用list可以将其转换为周长值列表。

答案 1 :(得分:1)

您似乎想返回提供给函数的每个三角形的周长。

这几乎可以直接在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]

答案 2 :(得分:1)

在第一个示例中-由于您在开始遍历任何三角形之前将周长设置为零,因此您将计算所有列出的三角形的总透视图。

通过在外部循环中移动impl<'a, K: Hash + Eq, V> IntoIterator for &'a LFUCache<K, V> { type Item = (Rc<K>, &'a V); type IntoIter = Box<dyn Iterator<Item=(Rc<K>, &'a V)> + 'a>; fn into_iter(self) -> Self::IntoIter { return Box::new(self .values .iter() .map(|(key, value_counter)| (key.clone(), &value_counter.value))); } } (在第二个示例中),您将在计算完第一个三角形之后将其丢弃,然后在计算之前丢弃了第二个三角形的总计再来第三次。

我会像这样重新编写您的代码:

perimeter = 0

您现在有了一个生成器,可以在其周围循环-或转换为列表,或传递给诸如地图,过滤器等功能。

def perimeters(geom):
    for triangle in geom:
         yield sum(triangle)

使用生成器的好处是它可以在需要时计算数据,而不是预先进行所有计算。

答案 3 :(得分:1)

小范围修复,将所有周长作为列表返回

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]