我有一个简单的~25个单词列表.我在PostgreSQL中有一个varchar字段,让我们说列表是['foo', 'bar', 'baz']
.我想在我的表中找到任何包含这些单词的行.这会有效,但我想要更优雅的东西.
select *
from table
where (lower(value) like '%foo%' or lower(value) like '%bar%' or lower(value) like '%baz%')
Run Code Online (Sandbox Code Playgroud) 可能令人惊讶的是,这个C++代码打印出来1
.
#include <iostream>
std::string x();
int main() {
std::cout << "x: " << x << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
x
是一个函数原型,它似乎被视为一个函数指针,而C++标准部分4.12布尔转换说:
4.12布尔转换[conv.bool] 1算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue.零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.对于直接初始化(8.5),std :: nullptr_t类型的prvalue可以转换为bool类型的prvalue; 结果值为false.
但是,x
永远不会绑定一个函数.正如我所料,C链接器不允许这样做.但是在C++中,这根本不是问题.谁能解释这种行为?
我已经描述了一些我用cProfile继承的遗留代码.我已经做了一些有帮助的改变(比如使用simplejson的C扩展!).
基本上,此脚本将数据从一个系统导出到ASCII固定宽度文件.每行都是一条记录,它有很多值.每行7158个字符,包含大量空格.总记录数为150万条记录.每行生成一行,并且需要一段时间(每秒5-10行).
生成每一行时,它尽可能简单地写入磁盘.分析表明约占总时间的19-20%file.write()
.对于1,500行的测试用例,即20秒.我想减少这个数字.
现在看来,下一次胜利将减少写入磁盘所花费的时间.如果可能的话,我想减少它.我可以在内存中保留一个记录缓存,但我不能等到最后并立即将其全部转储.
fd = open(data_file, 'w')
for c, (recordid, values) in enumerate(generatevalues()):
row = prep_row(recordid, values)
fd.write(row)
if c % 117 == 0:
if limit > 0 and c >= limit:
break
sys.stdout.write('\r%s @ %s' % (str(c + 1).rjust(7), datetime.now()))
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是在列表中保留记录缓存并分批写出来.会更快吗?就像是:
rows = []
for c, (recordid, values) in enumerate(generatevalues()):
rows.append(prep_row(recordid, values))
if c % 117 == 0:
fd.write('\n'.join(rows))
rows = []
Run Code Online (Sandbox Code Playgroud)
我的第二个想法是使用另一个线程,但这让我想死在里面.
我有一个数据框,我想要使用与某个名称匹配的列来转换所有列(例如,记录日志或其他内容).所以在下面的例子中,我想要记录X.1和X.2,但不是Y或Z.1.
df <- data.frame(
Y = sample(0:1, 10, replace = TRUE),
X.1 = sample(1:10),
X.2 = sample(1:10),
Z.1 = sample(151:160)
)
# option 1, won't work for dozens of fields
df$X.1 <- log(df$X.1)
df$X.2 <- log(df$X.2)
Run Code Online (Sandbox Code Playgroud)
当数据帧是几个gigabtyes时,有没有一种好的,有效的方法来做到这一点?
我有一个整数列表a = [0, ..., n]
。我想从a生成k个元素的所有可能组合;即a的笛卡尔积本身就是k次。请注意,n和k都可以在运行时更改,因此这至少需要一个可调整的函数。
因此,如果n为3,k为2:
a = [0, 1, 2, 3]
k = 2
desired = [(0,0), (0, 1), (0, 2), ..., (2,3), (3,0), ..., (3,3)]
Run Code Online (Sandbox Code Playgroud)
在python中,我将使用itertools.product()函数:
for p in itertools.product(a, repeat=2):
print p
Run Code Online (Sandbox Code Playgroud)
Go中惯用的方式是什么?
最初的猜测是返回一个整数切片的闭包,但感觉并不干净。
我有一个 ggplot2 图,其中 x 轴为日期时间,y 轴为分类。我需要在 x 轴上的某些日期放置 9 个文本注释,但图表本身没有空间放置注释。我想将自动生成的日期保留在 x 轴上,并添加我的自定义标签。我不在乎他们是在顶部还是在底部。
下面的合成示例。我有 9 个事件,以及导致这些事件的大量活动。我想在每个事件下方放置一个指示事件名称的文本标签。例如,在 2 月 11 日午夜的数据中,我希望在某处有一个标有“事件 1”的标签。
events <- data.frame(names=c("Event 1", "Event 2", "Event 3", "Event 4", "Event 5", "Event 6", "Event 7", "Event 8", "Event 9"),
dates=strptime(c("2013-02-10 11:59 pm", "2013-02-21 11:59 pm", "2013-03-02 11:59 pm", "2013-03-16 11:59 pm", "2013-03-26 12:00 pm", "2013-04-11 11:59 pm", "2013-04-24 11:59 pm", "2013-04-23 11:59 pm", "2013-05-08 12:00 pm")
, "%Y-%m-%d %I:%M %p"))
units <- replicate(125, paste(sample(LETTERS, 8), collapse=""))
n <- 2000 …
Run Code Online (Sandbox Code Playgroud) 我用psycopg2连接到了Postgresql数据库。我正在尝试更新列,但是列名称中有一个百分号(我不能更改)。
我正在尝试做:
QRY = """update X set "foo%" = %s"""
cursor.execute(QRY, some_value)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用。psycopg2给出有关列表索引超出范围的奇怪错误。我该如何正确逃脱呢?
postgresql ×2
python ×2
r ×2
c++ ×1
compilation ×1
file-io ×1
ggplot2 ×1
go ×1
iterator ×1
linker ×1
performance ×1
psycopg2 ×1
sql ×1