在另一个问题中,投票清楚地表明该os.path.splitext函数比简单的.split('.')[-1]字符串操作更受欢迎.有没有人有时间解释为什么会这样?是更快,更准确,还是什么?我愿意接受它有更好的东西,但我不能立即看到它可能是什么.可能导入整个模块来做这件事有点矫枉过正,至少在简单的情况下呢?
编辑:操作系统特异性是一个巨大的胜利,并不是立即显而易见的; 但即便如此,我也应该看到"如果没有一个点"会怎样的情况!并感谢大家对图书馆使用的一般评论.
我从网络中采用以下结构作为如何从BASH中的文件读取的基本示例:
cat inputfile.txt | while read line; do echo $line; done
Run Code Online (Sandbox Code Playgroud)
但是,我的inputfile.txt是制表符分隔的,并且来自上述命令的行是以空格分隔的.
这在我的实际应用程序中引起了我的问题,这当然比上面的更复杂:我想采取行,基于它生成一些新的东西,然后输出原始行加上新的东西作为额外的字段.与管道将要足够复杂而不一堆cut -d ' '和sed -e 's/ /\t/g'(这将不会是包含空格反正制表符分隔数据安全).
我看过IFS解决方案,但在这种情况下它们似乎没有帮助.我想要的是一个OFS ...除了我是回声,而不是awk!我想如果我能够得到回应来吐出我给它的东西,逐字逐句,我会处于良好的状态.有什么想法吗?谢谢!
我正在使用以下代码:
# Libs
require(ggplot2); require(gridExtra); require(grid)
# Generate separate charts
chrts_list_scts <- list()
# Data
data("mtcars")
# A
chrts_list_scts$a <- ggplot(mtcars) +
geom_point(size = 2, aes(x = mpg, y = disp,
colour = as.factor(cyl))) +
geom_smooth(aes(x = mpg, y = disp),
method = "auto") +
xlab("MPG") +
ylab("Disp") +
theme_bw() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.position = "none")
# B
chrts_list_scts$b <- ggplot(mtcars) +
geom_point(size = 2, aes(x = mpg, y = drat,
colour = as.factor(cyl))) +
geom_smooth(aes(x …Run Code Online (Sandbox Code Playgroud) 我是R的完全新手,我所看到的所有介绍都没有涵盖如何使用R,而你所拥有的只是命令行而没有窗口系统.我的数据在服务器上,我正在通过ssh处理它.在gnuplot中,您可以将"display"设置为磁盘上的PNG文件.如何在R上为磁盘上的文件绘制内容?关于CentOS的R-2.9.1,如果重要的话.谢谢!
(对不起,如果这是非常基本的,但我有最糟糕的时间谷歌搜索快速答案与R.可爱的名字,不可能搜索.)
我在一个入门的comp-sci课程(经过多年的网络编程之后),并且对我用单行程获得的速度感到好奇,如果有的话.
for line in lines:
numbers.append(eval(line.strip().split()[0]))
Run Code Online (Sandbox Code Playgroud)
所以我用痛苦的显式作业写了同样的东西,然后互相对抗.
for line in lines:
a = line.split()
b = a[0]
c = b.strip()
d = eval(c)
numbers.append(d)
Run Code Online (Sandbox Code Playgroud)
第二个运行速度快 30ms (在我的FreeBSD shell帐户上;参见编辑#2),输入文件为100K行!当然这是在3秒的总运行时间,因此百分比并不大...但我真的很惊讶看到所有那些明确命名的任务以某种方式帮助.
有一个最近的线程上的功能,而不是内联代码的性能,但这似乎更基本.是什么赋予了?我是否应该亲切地编写冗长冗长的代码并告诉我的嘲笑同事这是出于性能原因?(值得庆幸的是,列表理解版本运行速度提高了约10ms,因此我所珍视的紧凑性并不完全在窗外.)
编辑:感谢您对我的草率扩展代码的提示.你是对的,第二个应该是真的:
for line in lines:
a = line.strip()
b = a.split()
c = b[0]
d = eval(c)
numbers.append(d)
Run Code Online (Sandbox Code Playgroud)
然而,即使我已经解决了这个问题,我的时间分别是2.714s,2.652s和2.624s,对于单线程,完全爆炸形式和列表理解(未图示).所以我的问题就是!
编辑#2:有趣的是,即使对于一群知识渊博的人来说答案似乎并不明显,这让我对这个问题感觉好一些!在这种情况和类似的情况下,我现在可能会自己玩一下,看看会发生什么.如果你愿意,一定要继续修补线程,但是我要宣布我收到的答案是"嗯,这很有趣;一定是深刻的东西." 特别是因为steveha指出,机器之间的行为并不一致 - 在我的Debian和Windows安装上,另一个方向略有不同.感谢所有贡献的人!
python ×2
r ×2
bash ×1
border ×1
delimiter ×1
ggplot2 ×1
gridextra ×1
optimization ×1
scatter-plot ×1