如何从字符串中删除所有非字母字符?
例如
"Wë_1ird?!" -> "Wëird"
Run Code Online (Sandbox Code Playgroud)
在Perl中,我会这样做=~ s/[\W\d_]+//g
.在Python中,我会使用
re.sub(ur'[\W\d_]+', u'', u"Wë_1ird?!", flags=re.UNICODE)
Run Code Online (Sandbox Code Playgroud)
等等.
AFAICT,Str.regex
不支持\W
,\d
等等(我不知道它是否支持Unicode,但不知何故,我对此表示怀疑).
我想newcol
在数据框中创建一个新列df
,因为
df.groupby('keycol').apply(somefunc)
Run Code Online (Sandbox Code Playgroud)
显而易见的是:
df['newcol'] = df.groupby('keycol').apply(somefunc)
Run Code Online (Sandbox Code Playgroud)
不起作用:要么df['newcol']
最终包含所有nan
's (这肯定不是 RHS 评估的结果),要么引发一些异常(异常的详细信息根据somefunc
返回的内容而有很大差异)。
我尝试了上述的许多变体,包括类似的东西
import pandas as pd
df['newcol'] = pd.Series(df.groupby('keycol').apply(somefunc), index=df.index)
Run Code Online (Sandbox Code Playgroud)
他们都失败了。
唯一有效的方法是定义一个中间变量:
import pandas as pd
tmp = df.groupby('keycol').apply(lambda x: pd.Series(somefunc(x)))
tmp.index = df.index
df['rank'] = tmp
Run Code Online (Sandbox Code Playgroud)
有没有办法无需创建中间变量即可实现此目的?
(该文档GroupBy.apply
几乎没有内容。)
简洁版本
如何获得合理详细的,人类可读的转储.git/index
?
tl; dr版本
我有两个索引文件,myrepo/.git/index
并且myrepo-copy/.git/index
,根据不同的diff
(“二进制文件......不同”)。
我想了解有关两个索引文件如何不同的更多详细信息。
当然,我可以看看二进制内容的差异,但是我对更有意义的东西感兴趣。
因此,我正在寻找一种获取人类可读的转储我可以比较的两个索引文件的方法diff
。
我理解忽略和未跟踪文件之间的区别,至少在操作上,在git的标准工作流程中.
我很难理解为什么git的设计师觉得这是一个重要的区别.
IOW,为什么他们不去自动跟踪未被.gitignore
或.git/info/exclude
或全局excludesfile
规则排除的每个文件?
需要明确的是:我不是在批评git的设计.我确信这是一个非常好的理由,这个被忽视/未跟踪的区别.从设计的角度来看,我只想了解其背后的基本原理.
编辑:让我这样说吧.假设那里有一个工具,让我们称之为twit
,git
除了它没有"未跟踪"的概念之外,它在各方面都是相同的:文件可以被忽略或跟踪.有人可以形容一个能够清楚显示出git
优势的场景twit
吗?
EDIT2:我现在意识到,回想起来,在我的问题中隐含的假设"好理由"也是"易于理解"的.然而,这种假设并没有成功.有可能twit
只有在使用它一段时间之后才能感知到缺点,这些缺点会导致用户twit
改进到最终看起来像的东西git
.
假设我们想要在第一个既不是也不是的字符之前替换它的000
每个实例.1
0
1
例如,如果原始字符串是
"0011101TUVW0123ABC0123"
Run Code Online (Sandbox Code Playgroud)
然后所需的替换将产生字符串
"000000000000000TUVW0123ABC0123"
Run Code Online (Sandbox Code Playgroud)
在Perl 5中,假设$_
保存输入字符串,那么类似这样的东西就可以了:
'*any* constant you like!' while s/^(0*)1/${1}000/;
这种方法只是继续应用相同的替换规则(s/^(0*)1/${1}000/
)直到它"收敛"(即停止改变输入).
我想知道是否存在一个s///
替代,使得它的单个应用程序实现相同的结果.(想想单个应用程序s/1/000/g
能够替换每次出现的1
方式000
.)
需要注意的是一个单一的应用程序s/^(0*)1/${1}000/g
中,/g
尽管如此,只会取代的第一次出现1
,导致:
"000001101TUVW0123ABC0123"
Run Code Online (Sandbox Code Playgroud) 给定一个有序列表A
整数和整数q <= A[-1]
,我想找到的最小的非负折射率i
这样A[i] >= q
.
我可以想办法有效地做到这一点(例如使用某种形式的二进制搜索),但是我想知道Python的标准库或numpy/scipy中是否有任何东西可以用来实现它.
(例如,类似于MATLAB interp1
函数的东西.)
我知道这个成语:
eval {
...
};
$DB::single = 1 if $@;
Run Code Online (Sandbox Code Playgroud)
...但是,据我所知,如果调试器在eval
检测到堆栈中的帧已经太晚之后就停止了,因为它们恰好是错误发生的瞬间.
有没有办法在错误发生时准确地停止调试器,并检查调用堆栈中的帧?
我想了解为什么与之交互swipl
似乎不一致.
这是一个典型的例子.假设我查阅了包含以下定义的知识库:
acc_max([H|T], A, Max) :- H > A, acc_max(T, H, Max).
acc_max([H|T], A, Max) :- H =< A, acc_max(T, A, Max).
acc_max([], A, A).
max([H|T], Max) :- acc_max(T, H, Max).
Run Code Online (Sandbox Code Playgroud)
下面我显示max([0, 1, 2], X).
在输入提示符后我的屏幕显示的内容,并点击Enter:
?- max([0, 1, 2], X).
X = 2 ?
Run Code Online (Sandbox Code Playgroud)
(?
表示光标的位置.)
请特别注意,解释器的下一个提示尚未出现.
这是我输入后屏幕的样子;:
?- max([0, 1, 2], X).
X = 2 ;
false.
?- ?
Run Code Online (Sandbox Code Playgroud)
现在我终于得到了翻译的提示.
相比之下,下面我显示了max([2, 0, 1], X).
在输入提示符后我的屏幕显示的内容,并点击Enter:
?- max([2, …
Run Code Online (Sandbox Code Playgroud) 假设一个函数已绑定到多个名称(每个名称都在不同的绑定环境中).有没有办法让它找出哪些名称(如果有的话)被用来调用它?
一个简单的例子:
original.name <- function () cat("don't know my name (yet)...\n")
call.thunk <- function (thunk) thunk()
foo <- original.name
foo()
## don't know my name (yet)...
call.thunk(original.name)
## don't know my name (yet)...
Run Code Online (Sandbox Code Playgroud)
在上面的第一个调用中,使用名称调用函数foo
; 在第二个中,它被称为名称thunk
.是否可以修改函数的主体以便确定此信息?
(这个问题的动机是想要更多地了解R中的内省;我不是要解决任何具体问题.)
玩具示例
假设这base_df
是如下所示的微小数据帧:
In [221]: base_df
Out[221]:
seed
I S
0 a 0
b 1
1 a 2
b 3
Run Code Online (Sandbox Code Playgroud)
请注意,行base_df
具有2级多索引.(此处的部分问题涉及在派生数据帧中"传播"此多索引的值.)
现在,函数fn
(在本文末尾给出的定义)将整数seed
作为参数,并返回由字符串键1索引的1列数据帧.例如:
In [222]: fn(0)
Out[222]:
F
key
01011 0.592845
10100 0.844266
In [223]: fn(1)
Out[223]:
F
key
11110 0.997185
01000 0.932557
11100 0.128124
Run Code Online (Sandbox Code Playgroud)
我想生成一个新的数据帧,实质上是应用于fn
每一行base_df
,并垂直连接结果数据帧.更具体地说,期望的结果如下所示:
F
I S key
0 a 01011 0.592845
10100 0.844266
b 11110 0.997185
01000 0.932557
11100 0.128124
1 a 01101 0.185082
01110 …
Run Code Online (Sandbox Code Playgroud)