如何解决这段代码中的“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
来区分它们。
-
x_i
:我们将制作一个 Pythonset
。set
是一个容器(如列表),其规则是每个项目只能出现一次。 -
set
:这是一个生成器表达式(类似于 list comprehension)。这是执行x_i for name,x_i in marksheet
循环的快捷方式。 -
for
:这是tuple unpacking。name,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 举报,一经查实,本站将立刻删除。