我想从符合条件的列表中获取第一项.重要的是,生成的方法不会处理整个列表,这可能非常大.例如,以下功能就足够了:
def first(the_iterable, condition = lambda x: True):
for i in the_iterable:
if condition(i):
return i
Run Code Online (Sandbox Code Playgroud)
这个函数可以用这样的东西:
>>> first(range(10))
0
>>> first(range(10), lambda i: i > 3)
4
Run Code Online (Sandbox Code Playgroud)
但是,我想不出一个好的内置/单线来让我这样做.如果我不需要,我不特别想复制这个功能.是否有内置方法可以使第一个项目符合条件?
使用C#4.0,我创建了一个System.Diagnostics.Process我希望花费很少时间来运行的东西.如果由于某种原因,该过程在一段时间后没有退出(例如,我已经调用.WaitForExit(timeout)并且返回值是false),我需要清理.我已经决定.Kill()在这种特殊情况下使用是安全的(没有数据结构我担心会破坏).
鉴于此设置,我是否还需要调用.Close()Process 的方法?如果是这样,我应该.Close()在之前还是之后打电话.Kill()?
我注意到有关分支名称的问题的一些 答案引用Mercurial wiki来指示每个功能的分支或每个bug的分支命名约定可能会导致性能问题.将分支标记为--close-branch在提交时标记为关闭的能力是否会对此性能声明产生任何影响?
每次我必须对字符串进行简单的包含或替换操作时,我正在搜索的术语是固定值,我发现如果我采用我的示例输入并对其进行一些分析,则使用编译的正则表达式是几乎*总是比使用String类中的等效方法更快.
我试过比较各种方法(hs是搜索的"草堆",搜索ndl的"针",repl是替换值.regex总是用RegexOptions.Compiled选项创建):
hs.Replace( ndl, repl ) VS regex.Replace( hs, repl )hs.Contains( ndl ) VS regex.IsMatch( hs )我发现相当多的讨论集中于这两种技术都更快(1,2,3,和其他的负载),但是这些讨论似乎总是集中在:
我不明白这是怎么回事:正则表达式引擎如何比同等字符串版本更快地比较任何两个字符串的子串匹配?这似乎适用于非常小或非常大的搜索空间,或搜索条件的小或大,或者搜索项是在搜索空间的早期还是晚期发生的.
那么,为什么正则表达式会更快?
*事实上,我唯一能够证明字符串版本比编译正则表达式更快的情况是搜索空字符串时!从单个字符串到非常长的字符串的任何其他情况都由编译的正则表达式比等效的字符串方法更快地处理.
更新:添加了一个条款,以澄清我正在查看在编译时已知搜索项的情况.对于动态或一次性操作,编译正则表达式的开销倾向于使结果倾斜以支持字符串方法.
有时候我发现我的文件随着时间的推移而变得越来越多,包含了比我喜欢的更多的类/函数/ whatevers.现在是重构的时候了!在这种情况下,我通常会发现我的一个文件变成了几个:本身加上其他几个文件,每个文件都包含文件的不同部分.
不幸的是,只是创建这些新文件会"破坏"历史记录 - 很难说这些函数最初来自另一个文件.如果在重构期间对代码进行任何其他更改,情况会更糟.
我的一位同事发现他可以通过这样的方式"滥用"重命名功能:
hg rename --after original_file new_file_1
hg rename --after original_file new_file_2
hg rename --after original_file new_file_3
hg add original_file
Run Code Online (Sandbox Code Playgroud)
结果是每个新文件看起来像一个重命名,文件的其余部分被删除,原始文件看起来像丢失了删除的块.到目前为止,这似乎是理想的.但是,我担心这些多次重命名会导致一些混乱的合并.
这种"多重命名"方法有什么问题吗?
我的应用程序有一个功能,使用正则表达式解析文本以提取特殊值.我发现自己也需要创建遵循相同格式的字符串.有没有办法使用已定义的正则表达式来创建这些字符串?
例如,假设我的正则表达式看起来像这样:
public static Regex MyRegex = new Regex( @"sometext_(?<group1>\d*)" );
Run Code Online (Sandbox Code Playgroud)
我希望能够用来MyRegex创建一个新的字符串,如:
var created = MyRegex.ToString( new Dictionary<string, string>() {{ "group1", "data1" }};
Run Code Online (Sandbox Code Playgroud)
created那么那将具有值"sometextdata1".
更新:从下面的一些答案来看,我没有说清楚.我不想生成符合条件的随机字符串,我希望能够创建符合条件的特定字符串.在上面的例子中,我提供了"data1"来填充"group1".基本上,我有一个正则表达式,我想以类似于格式字符串的方式使用,而不是定义一个单独的格式字符串.
正如我之前所说,Pig不能很好地处理空(0字节)文件.不幸的是,有很多方法可以创建这些文件(即使在Hadoop实用程序中).
我认为通过使用Hadoop的glob语法显式加载LOAD语句中与给定命名约定匹配的文件,我可以解决这个问题.不幸的是,这似乎不起作用,因为即使我使用glob过滤到已知良好的输入文件,我仍然遇到前面提到的0字节失败.
这是一个例子:假设我在S3中有以下文件:
如果我在我的猪脚本中使用这样的LOAD语句:
myData = load 's3://mybucket/a/b/*.log as ( ... )
Run Code Online (Sandbox Code Playgroud)
我希望Pig不会在0字节文件上窒息,但它仍然会.是否有一个技巧让Pig实际上只查看与预期的glob模式匹配的文件?
我们的工作流使用AWS弹性地图缩减群集来运行一系列Pig作业,以将大量数据处理为聚合报告.遗憾的是,输入数据可能不一致,并且可能导致没有输入文件或0字节文件被提供给管道或甚至由管道的某些阶段产生.
在LOAD语句期间,如果找不到任何输入文件或者任何输入文件是0字节,则Pig会失败.
有没有什么好方法可以解决这个问题(希望在Pig配置或脚本或Hadoop集群配置中,无需编写自定义加载程序......)?
(由于我们使用AWS弹性贴图减少,我们坚持使用Pig 0.6.0和Hadoop 0.20.)
我试图通过Pig程序使用Amazon的Elastic Map Reduce来解析由我们的服务生成的制表符分隔数据文件.事情进展顺利,但我们所有的数据文件都包含一个标题行,用于定义每列的用途.显然,(字符串)标题不能转换为数字数据值,因此我从Pig得到警告,如下所示:
2011-03-17 22:49:55,378 [main] WARN org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigHadoopLogger - org.apache.pig.builtin.PigStorage: Unable to interpret value [<snip>] in field being converted to double, caught NumberFormatException <For input string: "headerName"> field discarded
Run Code Online (Sandbox Code Playgroud)
我在load语句之后有一个过滤器,它试图确保我以后不会对任何标题行进行操作(通过过滤掉标题术语),但是我想摆脱警告噪音以避免掩盖任何潜在的问题(例如未正确投射的实际数据字段).
这可能吗?
我们都有过这样的经历——您使用 Mercurialhg move命令以外的其他东西移动文件,然后提交并推送您的更改,但后来才意识到您的错误。有没有什么方法可以在以后通知 Mercurial,“旧”路径和“新”路径之间存在关系?
我试过玩,--after但似乎只是出错了,除非您在提交问题变更集之前碰巧发现了问题:
> hg move OLD_PATH NEW_PATH --after
OLD_PATH: The system cannot find the file specified
abort: no files to copy
Run Code Online (Sandbox Code Playgroud)
在我的特殊情况下,此更改是由同事在一个(或两个)杂乱的私有分支上提交的,然后合并到我们的default分支并推送到我们的主存储库,因此它已经传播到整个团队。
有任何想法吗?