我想计算三角形的周长。我想访问列表的具体元素,所以我在使用嵌套的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
答案 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]