谁能解释一下下面的说法吗?
result = sorted(set([score for name, score in alist]))[1]
其中
alist
是嵌套列表,如下:
[[name1, score1], [name2, score2], [name3, score3]]
我明白
sorted()
功能可以使内容有序。 set([])
是存储有序内容的数据类型。但[score for name, score in alist]
是我不清楚的部分。
alist = [[name1, 80], [name2, 99], [name3, 90]]
result = sorted(set([score for name, score in alist]))[1]
我想更好地理解这句话。
[score for name, score in alist]
是一个列表推导式,可以写成如下(这里使用临时变量名tmp
仅作为示例):
tmp = []
for name, score in alist:
tmp.append(score)
print(tmp)
tmp
是一个仅包含 alist
: 的分数的列表
[80, 99, 90]
因此
set([score for name, score in alist])
将从该列表中创建一个集合(并删除重复项 - 如果有的话)。结果:
{80, 90, 99}
然后对集合进行排序并获得第二个元素 (
[1]
):
result = sorted(set([score for name, score in alist]))[1]
result
现在是90
解释器从里到外解释语句,所以这也是你应该做的。您的线路:
result = sorted(set([score for name, score in alist]))[1]
可以分成多行,如下所示:
scores_list = [score for name, score in alist]
scores_set = set(scores_list)
sorted_scores = sorted(scores_set)
result = sorted_scores[1]
现在,很容易理解这里发生的事情:
alist
是一个列表列表,每个内部列表都包含一个名称和一个分数,列表推导式会创建一个仅包含分数的列表。我们称其为scores_list
。set(scores_list)
从该列表中创建一个集合,即删除重复项。我们称此为scores_set
sorted(scores_set)
对该集合中的元素进行排序。由于集合没有任何顺序,sorted
会自动将结果转换为列表,我们将其称为sorted_scores
。result
被定义为sorted_scores
在索引1
处的元素,即第二个元素。