无法理解平均年龄计算

-4 投票
4 回答
952 浏览
提问于 2025-04-18 18:21

我刚开始学习Python,正在阅读以下代码:

people = [ [ 'John', 42 ], [ 'James', 36 ], [ 'Sue', 38 ] ]  
ages = [] 
for person in people:     
     age = person[1]     
     ages.append(age)  

avg_age = sum(ages) / len(people)
print "Average age:", avg_age

问题:

  1. ages = [ ]是什么意思?
  2. age = people[1]是什么意思?
  3. ages.append(age)是什么意思?

4 个回答

0
    ages =[ ] # creating an empty list
    age = people[1] # is assigning the value of first element of your list(people)
    ages.append(age) # you are adding the value of age to your second list (ages)

我建议你先看看一些Python的基础教程,这些教程里有很多例子。这样你可以自己动手练习,试着玩玩列表,了解它的各种方法是怎么工作的。

0

如果你直接展开people里的子列表,可能会更容易理解:

people = [ [ 'John', 42 ], [ 'James', 36 ], [ 'Sue', 38 ] ]  
ages = [] 
for person, age in people:  
     ages.append(age)  

avg_age = sum(ages) / len(people)
print "Average age:", avg_age

你还可以使用列表推导式

people = [ [ 'John', 42 ], [ 'James', 36 ], [ 'Sue', 38 ] ]  
ages = [age for person, age in people] 

avg_age = sum(ages) / len(people)
print "Average age:", avg_age

因为在你的列表推导式中没有使用到person,所以你可以直接省略它:

people = [ [ 'John', 42 ], [ 'James', 36 ], [ 'Sue', 38 ] ]  
ages = [age for _, age in people] 

avg_age = sum(ages) / len(people)
print "Average age:", avg_age

最后,如果你把其中一个元素变成浮点数,你会得到更好的平均值。这里有一种方法:

people = [ [ 'John', 42 ], [ 'James', 36 ], [ 'Sue', 38 ] ]  
ages = [age for _, age in people] 

avg_age = sum(ages) / float(len(people))
print "Average age:", avg_age

还有另一种方法:

people = [ [ 'John', 42 ], [ 'James', 36 ], [ 'Sue', 38 ] ]  
ages = [float(age) for _, age in people] 

avg_age = sum(ages) / len(people)
print "Average age:", avg_age
0

ages = [ ] 这是什么意思? 这表示创建了一个空的列表,必须先创建这个列表,才能往里面添加值。

age = people[1] 这是什么意思? 这表示只需要读取字典中的第一个占位符。

ages.append(age) 这是什么意思? 这表示把每个字典条目的年龄值放进 ages 列表里。

0
ages=[]

这表示你创建了一个名为 ages 的空列表。这个列表里面没有任何元素。

age=person[1]

这是一个赋值操作,你把 person 中第一个元素的值赋给 ages。

ages.append(age)

把 age 的值添加到 ages 列表中。 现在当你打印 ages 列表时,可以看到 age 的值已经被添加进来了。

ages=[]
ages.append(3)
ages.append(4)
print ages

将会输出

[3,4]

撰写回答