【问题标题】:What means "x=sorted(list(set(x for name,x in marksheet)))" in this python code?这个 python 代码中的“x=sorted(list(set(x for name,x in marksheet)))”是什么意思?
【发布时间】:2021-01-27 17:02:35
【问题描述】:
marksheet=[]
marksheet = [[input(), float(input())] for _ in range(int(input()))]
        

x=sorted(list(set(x for name,x in marksheet)))
print(x)

我刚开始学习python,我不明白“set(x for name,x in marksheet)”部分。这是什么意思?

非常感谢。

【问题讨论】:

  • marksheet[name, x] 对的列表。正在构建的set 只是xs;因为它是set,所以每个唯一值只有一个。
  • 代码所做的整体是提示输入一个数字,然后多次提示输入一对值。它丢弃每对的第一个值,并打印第二个值的排序和去重列表。

标签: python list sorting set


【解决方案1】:
x = set(x for name,x in marksheet)

首先,右边的x 与左边的x 无关。我会打电话给右边的x_i 来区分它们。

  1. set:我们将创建一个 Python setset 是一个容器(类似于列表),规则是每个项目只能出现一次。

  2. x_i for name,x_i in marksheet:这是一个生成器表达式(如list comprehension)。这是进行for 循环的捷径。

  3. name,x_i in marksheet:这是tuple unpackingmarksheet 看起来像 [(name1, x1), (name2, x2), ...]:它是一个列表列表。那里的name,x_i 也可以写成(name, x_i):更明确地说是一个元组。

可以编写相同的代码:

x = set([])  # start with an empty set
for name, x_i in marksheet:
    x.add(x_i)

所以它选择marksheet中每对的第二个元素的唯一值。

由于不使用name,因此通常使用虚拟变量_。您也可以使用直接集合推导,而不是生成器表达式:

x = {x_i for _, x_i in marksheet}

【讨论】:

    【解决方案2】:

    Set 是一种数据结构,可确保其中的每个项目仅存在一个副本。所以只能存在人名及其对应标记的副本。

    所以如果marksheet是这样的

    [97.5, 45.3, 97.5] 
    

    然后应用 set 操作将其转换为

    [97.5, 45.3] 
    

    【讨论】:

    • 集合仅由内部列表的第二个值构成。否则一个简单的set(marksheet) 就足够了。
    • 是的,令人困惑的格式让我大吃一惊,直到我意识到无法对列表进行哈希处理。
    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 2020-03-18
    • 2021-08-02
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多