假设我们希望处理迭代器并希望通过块来处理它.
每个块的逻辑取决于先前计算的块,因此groupby()
没有帮助.
在这种情况下,我们的朋友是itertools.takewhile():
while True:
chunk = itertools.takewhile(getNewChunkLogic(), myIterator)
process(chunk)
Run Code Online (Sandbox Code Playgroud)
问题是takewhile()
需要经过满足新块逻辑的最后一个元素,因此"吃掉"下一个块的第一个元素.
有各种解决方案,包括包装或àC ungetc()
等.
我的问题是:有一个优雅的解决方案吗?
当使用adler32()作为哈希函数时,应该会遇到罕见的冲突.
我们可以对碰撞概率进行精确计算,但粗略地说,
因为它是一个32位散列函数,所以
在几千个项目的样本集上不应该有很多碰撞.
情况并非如此.
这是一个例子:让我们采取包含中间日期的字符串,例如
"Some prefix text " + date + " some postfix text."
Run Code Online (Sandbox Code Playgroud)
其中,dates`格式为yyyy-mm-dd,并在2012年循环.
这个例子中有91次碰撞!
更糟糕的是:有7个案例发生了3个日期相撞.
为什么这种常用的哈希函数表现如此糟糕?
或者我错过了什么?
以下是上述示例的详细结果:
0x592a0f1f: 2012-01-30, 2012-02-02, 2012-10-21
0x592b0f1f: 2012-02-11, 2012-10-30, 2012-11-02
0x593d0f20: 2012-01-31, 2012-02-03, 2012-10-22
0x593e0f20: 2012-02-12, 2012-10-31, 2012-11-03
0x59410f20: 2012-03-11, 2012-11-30, 2012-12-02
0x59560f21: 2012-03-30, 2012-04-02, 2012-12-21
0x59690f22: 2012-03-31, 2012-04-03, 2012-12-22
0x59020f1d: 2012-01-10, 2012-10-01
0x59150f1e: 2012-01-11, 2012-10-02
0x59160f1e: 2012-01-20, 2012-10-11
0x59170f1e: 2012-02-01, 2012-10-20
0x59180f1e: 2012-02-10, 2012-11-01
0x59280f1f: 2012-01-12, 2012-10-03
0x59290f1f: 2012-01-21, 2012-10-12
0x592c0f1f: 2012-02-20, 2012-11-11
0x592d0f1f: 2012-03-01, 2012-11-20
0x592e0f1f: 2012-03-10, …
Run Code Online (Sandbox Code Playgroud) 假设我想要一个函数来更改DataFrame的给定行号中的命名列的值.
一种选择是找到列的位置并使用iloc,如下所示:
def ChangeValue(df, rowNumber, fieldName, newValue):
columnNumber = df.columns.get_loc(fieldName)
df.iloc[rowNumber, columnNumber] = newValue
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有办法一次性使用iloc和loc的魔法,并跳过手动转换.
有任何想法吗?
新版本应该支持2.7,但是pip安装它失败了,并且在一行中使用了python 3类型注释语法的SyntaxError(这有点讽刺):
Traceback (most recent call last):
...
from mypy import git
File "mypy/git.py", line 10
def is_git_repo(dir: str) -> bool:
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud) 使用vs进行调试时,它会尝试为所有dll加载符号.
出于某种原因,这需要很长时间进行远程调试(尽管目标机器上没有符号).
如何判断vs不加载系统dll的符号?
我正在寻找类似于 SQL 的 LEAST() 函数的东西。
由于存在二元运算符(以及明确定义的匹配行为),人们会期望也会有 min/max,但找不到这样的函数。
我知道这可以使用正则表达式(即min(__name__=~"a|b")
)来实现,但希望尽可能避免此类黑客攻击。
使用简单的值,没有问题:我们只需在.cpp文件中设置它们.
但请考虑以下示例,它需要一些init/cleanup代码:
// .h
class MyClass {
...
private:
static unsigned First1000Primes[1000];
} ;
Run Code Online (Sandbox Code Playgroud)
在.cpp文件中,我们要初始化数组,并需要一些代码.
我们可以在.cpp文件中定义一个类Initializer,使用一个填充值的ctor,并在同一个文件中声明一个静态的Initializer InitAndCleanup,这样代码将在启动时运行一次(如果需要,同样运行dtor/cleanup代码) .
这个解决方案的问题在于它的"混乱",因为初始化程序必须是MyClass的朋友才能访问其私有部分.
所以我的问题是:有更干净的方式吗?
一些全局变量用于python模块:
ImFirst = 1
ImSecond = 2
AndImThird = "three"
Run Code Online (Sandbox Code Playgroud)
globals()给出了这些名称和值的字典,但不幸的是它不是OrderedDict(显然,因为globals()早于集合模块).
有没有办法获得全局名称出现在模块中的顺序?
python ×4
adler32 ×1
c++ ×1
hash ×1
mypy ×1
pandas ×1
prometheus ×1
promql ×1
python-2.7 ×1
reflection ×1
windows ×1