微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这段代码中的“x=sorted(list(set(x for name,x in marksheet)))”是什么意思

如何解决这段代码中的“x=sorted(list(set(x for name,x in marksheet)))”是什么意思

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)”部分。这是什么意思?

解决方法

library(shiny)

ui <- fluidPage(
    selectInput("select",label = "Multiple choices",choices = c(1,2,3,4),selected = c(1,2),multiple = TRUE)
)

server <- function(input,output) {
    # Won't execute with no value selected
    observeEvent(input$select,{
        vec_str <- paste(input$select,collapse = " ")
        print(paste("observeEvent:",vec_str))
    })
    
    # Will execute with no value selected
    observe({
        vec_str <- paste(input$select,collapse = " ")
        print(paste("observe:",vec_str))
    })
}

shinyApp(ui = ui,server = server)

首先,右侧的 x = set(x for name,x in marksheet) 与左侧的 x 无关。我会调用右边的 x 来区分它们。

  1. x_i:我们将制作一个 Python setset 是一个容器(如列表),其规则是每个项目只能出现一次。

  2. set:这是一个生成器表达式(类似于 list comprehension)。这是执行 x_i for name,x_i in marksheet 循环的快捷方式。

  3. for:这是tuple unpackingname,x_i in marksheet 看起来像 marksheet:它是一个列表列表。那里的 [(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。您也可以使用直接集合推导式,而不是生成器表达式:

_
,

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

所以如果marksheet就像

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie-edge">
    <title>Lunar Landing</title>
    <link rel="stylesheet" href="app.css">
</head>
<body>
    <img src="img/ship.png" id="ship">
    <img src="img/moon.png" id="moon">
    <script src="app.js"></script>
</body>
</html>


function isTouching(a,b) {
const aRect = a.getBoundingClientRect();
const bRect = b.getBoundingClientRect();

return !(
    aRect.top + aRect.height < bRect.top ||
    aRect.top > bRect.top + bRect.height ||
    aRect.left + aRect.width < bRect.left ||
    aRect.left > bRect.left + bRect.width
);
}

const init = () => {
const avatar = document.querySelector('#ship');
const coin = document.querySelector('#moon');
moveCoin();
window.addEventListener('keyup',function(e) {
    if (e.key === 'ArrowDown' || e.key === 'Down') {
        moveVertical(avatar,50);
    }
    else if (e.key === 'ArrowUp' || e.key === 'Up') {
        moveVertical(avatar,-50);
    }
    else if (e.key === 'ArrowRight' || e.key === 'Right') {
        moveHorizontal(avatar,50);
        avatar.style.transform = 'scale(1,1)';
    }
    else if (e.key === 'ArrowLeft' || e.key === 'Left') {
        moveHorizontal(avatar,-50);
        avatar.style.transform = 'scale(-1,1)';
    }
    if (isTouching(avatar,coin)) moveCoin();
});
};

const moveVertical = (element,amount) => {
const currTop = extractPos(element.style.top);
element.style.top = `${currTop + amount}px`;
};
const moveHorizontal = (element,amount) => {
const currLeft = extractPos(element.style.left);
element.style.left = `${currLeft + amount}px`;
};

const extractPos = (pos) => {
if (!pos) return 100;
return parseInt(pos.slice(0,-2));
};

const moveCoin = () => {
const x = Math.floor(Math.random() * window.innerWidth);
const y = Math.floor(Math.random() * window.innerHeight);
coin.style.top = `${y}px`;
coin.style.left = `${x}px`;
};

init();

然后应用集合操作将其转换为

[97.5,45.3,97.5] 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。