任何人都可以解释一下以下内容吗?结果=排序(设置([名称的分数,列表中的分数]))[1]

问题描述 投票:0回答:2

谁能解释一下下面的说法吗?

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]

我想更好地理解这句话。

python set nested-lists
2个回答
0
投票

[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


0
投票

解释器从里到外解释语句,所以这也是你应该做的。您的线路:

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]

现在,很容易理解这里发生的事情:

  1. 给定
    alist
    是一个列表列表,每个内部列表都包含一个名称和一个分数,列表推导式会创建一个仅包含分数的列表。我们称其为
    scores_list
  2. 然后,
    set(scores_list)
    从该列表中创建一个集合,即删除重复项。我们称此为
    scores_set
  3. 然后,
    sorted(scores_set)
    对该集合中的元素进行排序。由于集合没有任何顺序,
    sorted
    会自动将结果转换为列表,我们将其称为
    sorted_scores
  4. 最后,
    result
    被定义为
    sorted_scores
    在索引
    1
    处的元素,即第二个元素。
© www.soinside.com 2019 - 2024. All rights reserved.