假设我有一个list[str]包含时间戳"HH:mm"格式的对象,例如
timestamps = ["22:58", "03:11", "12:21"]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为list[int]每个时间戳的“自午夜以来的分钟数”值的对象:
converted = [22*60+58, 3*60+11, 12*60+21]
Run Code Online (Sandbox Code Playgroud)
...但我想以风格来完成它并使用单个列表理解来完成它。我天真的构建的(语法不正确的)实现类似于:
def timestamps_to_minutes(timestamps: list[str]) -> list[int]:
return [int(hh) * 60 + int(mm) for ts in timestamps for hh, mm = ts.split(":")]
Run Code Online (Sandbox Code Playgroud)
...但这不起作用,因为这for hh, mm = ts.split(":")不是有效的语法。
写同样的东西的有效方式是什么?
澄清一下:我可以看到一个形式上令人满意的解决方案,其形式为:
def timestamps_to_minutes(timestamps: list[str]) -> list[int]:
return [int(ts.split(":")[0]) * 60 + int(ts.split(":")[1]) for ts in timestamps]
Run Code Online (Sandbox Code Playgroud)
...但是这是非常低效的,我不想将字符串分割两次。
我正在尝试使用slots=TruePython 3.10.5 中的数据类调用超类方法。
from dataclasses import dataclass
@dataclass(slots=True)
class Base:
def hi(self):
print("Hi")
@dataclass(slots=True)
class Sub(Base):
def hi(self):
super().hi()
Sub().hi()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。
Traceback (most recent call last):
File "...", line 16, in <module>
Sub().hi()
File "...", line 13, in hi
super().hi()
TypeError: super(type, obj): obj must be an instance or subtype of type
Run Code Online (Sandbox Code Playgroud)
slots=True如果我从 中删除Sub,或者手动将其设为非数据类,则效果很好__slots__。如果我改为执行这些操作,错误仍然存在Base。
Sub.__mro__是(<class '__main__.Sub'>, <class '__main__.Base'>, <class 'object'>)是isinstance(Sub(), Base)。True
map()我发现了一种使用不等同于列表理解的情况。next当用作第一个参数时会发生这种情况。
例如:
l1 = [1, 2]
l2 = ['hello', 'world']
iterators = [iter(l1), iter(l2)]
# list comprehension
values1 = [next(it) for it in iterators]
# values1 = [1, "hello"]
values2 = [next(it) for it in iterators]
# values2 = [2, "world"]
values3 = [next(it) for it in iterators]
# raise StopIteration
Run Code Online (Sandbox Code Playgroud)
l1 = [1, 2]
l2 = ['hello', 'world']
iterators = [iter(l1), iter(l2)]
# map
values1 = list(map(next, iterators))
# values1 = [1, "hello"]
values2 = list(map(next, …Run Code Online (Sandbox Code Playgroud) 为了自学OpenGL,我正在通过第五版的Superbible工作.
我目前正在试图弄清楚如何结合HDR和MSAA(如第9章所述).
对于HDR,本书提出了一种自适应色调映射方法,该方法基于计算每个片段的5x5卷积滤波器的平均亮度.
对于MSAA,使用的方法通过从样本距离计算的权重来平均所有样本.
我尝试将两者结合起来,在下面的pastebin中,将色调映射应用于每个样本,然后平均它们以计算最终的片段颜色.
性能是(正如人们应该预期的那样?)可怕:每个样本25个查找,4xMSAA为4次,我猜测GPU花费大部分时间来查找我的FBO纹理.切换到代码中由use_HDR统一控制的代码路径,对于简单的场景,性能会下降400 + fps到10以下.
我的问题是双重的:
这是一种执行色调映射的理智方法吗?如果没有,你会建议什么?
MSAA和基于卷积的过滤器应该如何组合?我猜我会再次遇到这个问题需要查找相邻纹素的任何滤镜,即几乎任何像绽放,模糊等等?
码:
#version 330
in Data
{
vec4 position;
vec4 normal;
vec4 color;
vec2 texCoord;
mat4 mvp;
mat4 mv;
} gdata;
out vec4 outputColor;
uniform sampler2DMS tex;
uniform sampler1D lum_to_exposure;
uniform samplerBuffer weights;
uniform int samplecount;
uniform bool use_HDR;
vec4 tone_map(vec4 color, float exp)
{
return 1.0f - exp2(-color * exp);
}
const ivec2 tc_offset[25] = ivec2[](ivec2(-2, -2), ivec2(-1, -2), ivec2(0, -2), ivec2(1, -2), ivec2(2, -2),
ivec2(-2, -1), …Run Code Online (Sandbox Code Playgroud) 在我的代码中,我曾经if a == b or a == c or a == d:经常进行比较。在某些时候,我发现这些可以很容易地缩短为if a in {b, c, d}:或者if a in (b, c, d):如果值不可哈希。但是,我从未在其他任何人的代码中看到过这样的结构。这可能是因为:
==方法比较慢。==方法是更Python。in除了我,没有人想过办法。如果有,是哪个原因?
当我写下这个:
fn add1(vc: &mut Vec<usize>) {
func1(vc, vc[0]);
}
fn func1(vc: &mut Vec<usize>, val: usize) {}
Run Code Online (Sandbox Code Playgroud)
Clippy 告诉我“写入&mut Vec而不是&mut [_]涉及一个切片可以做的新对象”。
但是,如果我将其切换为:
fn add1(vc: &mut Vec<usize>) {
func1(vc, vc[0]);
}
fn func1(vc: &mut [usize], val: usize) {}
Run Code Online (Sandbox Code Playgroud)
我得到“不能*vc作为不可变借用,因为它也作为可变借用 [E0502]”。
这是有道理的,但是为什么之前它会起作用呢?
另外,为什么 Clippy 给我错误的警告?
我做到了
pip3 install graphlib
Run Code Online (Sandbox Code Playgroud)
我现在可以了import graphlib,但是
from graphlib import TopologicalSorter
Run Code Online (Sandbox Code Playgroud)
失败了。如果是的话import graphlib,它告诉我没有属性TopologicalSorter。
我究竟做错了什么?
我有一个程序,例如,我需要将包含字符串的变量转换为,'01000100'以便0b01000100我可以将其解码为相应的符号,在本例中,'D'是使用内置chr()函数的字母。如何进行这种转换,或者是否有更简单的方法将字符串转换为相应的符号?
我有以下代码:
void main(int argc, char *argv[]){
for (int i=1; i<argc; i++){
printf("%s-%lu\t", argv[i], sizeof(argv[i]));
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这$./a.out int long应该给我
short-2 int-4 long-8
Run Code Online (Sandbox Code Playgroud)
但我得到了
short-8 int-8 long-8
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么吗?
我最近尝试了这段代码,只是为了满足好奇心。
from * import * as *
if __name__ == '__main__':
z = *.zeros((3,3))
print(z)
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么import *不被认为是有效的选择吗?我真的希望有一个选项可以仅导入一行中安装/识别的每个库。我应该发布错误报告还是功能请求?
python ×7
binary ×1
c ×1
glsl ×1
importerror ×1
inheritance ×1
opengl ×1
python-3.x ×1
rust ×1
slice ×1
slots ×1