小编Mic*_*ael的帖子

高效实现:Java中的"Python For Else Loop"

在Python中,这里描述一个有效的else循环实现

示例代码:

for x in range(2, n):
    if n % x == 0:
        print n, 'equals', x, '*', n/x
        break
else:
    # loop fell through without finding a factor
    print n, 'is a prime number'
Run Code Online (Sandbox Code Playgroud)

在Java中,我需要编写更多代码来实现相同的行为:

finishedForLoop = true;
for (int x : rangeListOfIntegers){
    if (n % x == 0)
    {
        //syso: Some printing here
        finishedForLoop = false
        break;
    }
}
if (finishedForLoop == true){
    //syso: Some printing here
}
Run Code Online (Sandbox Code Playgroud)

在Java中有没有更好的类似于Python for else循环的实现?

python java for-loop if-statement

28
推荐指数
2
解决办法
1万
查看次数

python高效子字符串搜索

可能重复:
如何在CPython中实现string.find?

我在这里阅读了很多关于堆栈溢出的帖子比较子字符串搜索的性能(例如Python字符串搜索效率, 这是搜索子字符串的最有效方法吗?, python中的子字符串等等)

我还看了一下包含abstract.c的源代码实现.

据我所知,内置实现是迭代的:python docs

python是否有更多足够的技术来实现查找子字符串:Boyer-Moore算法, Rabin-Karp算法等...... ???

编辑

问题已经扩展: Python:通过嵌入复杂的算法改进子字符串搜索.

c python algorithm performance substring

11
推荐指数
1
解决办法
1903
查看次数

Python中字符串中所有字符的ASCII值的总和

我正在寻找一种更有效的方法来总结给定字符串中所有字符的ASCII值,只使用标准的python(最好是2.7).

目前我有:

print sum(ord(ch) for ch in text)
Run Code Online (Sandbox Code Playgroud)

我想强调一下,这个问题的主要焦点和方面就是我上面写的内容.

以下是这个问题的一个不那么重要的方面,应该这样对待:

那我为什么要问呢?!我已经比较了这种方法与嵌入一个简单的C代码函数,它使用PyInline 在这里做同样的事情,而且看起来简单的C嵌入函数快17倍.

如果没有比我建议的更快的Python方法(仅使用标准的Python),那么Python开发人员没有在核心中添加这样的实现似乎很奇怪.

建议答案的当前结果.在我的Windows 7,i-7,Python 2.7上:

 text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
 sum(ord(ch) for ch in text)
 >> 0.00521324663262
 sum(array.array("B", text))
 >> 0.0010040770317
 sum(map(ord, text ))
 >> 0.00427160369234
 sum(bytearray(text))
 >> 0.000864669402933

 C-code embedded:
 >> 0.000272828426841
Run Code Online (Sandbox Code Playgroud)

python string ascii python-2.7

11
推荐指数
2
解决办法
2万
查看次数

内置"in"运算符的Python源代码

我试图in在(C)Python源代码中找到内置运算符的实现.我在内置函数源代码bltinmodule.c中搜索过,但是找不到这个运算符的实现.我在哪里可以找到这个实现?

我的目标是通过扩展此搜索的不同C实现来改进Python中的子字符串搜索,尽管我不确定Python是否已经使用了我的想法.

c python string cpython python-internals

9
推荐指数
1
解决办法
2037
查看次数

Java:对于每个循环,迭代扩展对象

我的问题可能很简单,

我有一个Result内部领域,制定者和吸气剂的课程.

此外,我有Special1Result一个扩展的类,Result包括几个字段和Special2Result一些更多的数据.

在不同的课程中Dispatcher,我写了以下方法:

processResults(List<? extends Result> results),这只是熟悉Result(我需要这个方法来查询扩展的Result对象中是否有特定的字段 - 我正在使用注释).

所以我决定使用扩展for-each循环: for (Result res : results) {}

那么我的问题是什么?我试图通过网络找到如何写这个for循环的扩展对象,例如像这样的东西for (? extends Results res: results){}

可能吗?写它的正确方法怎么样?

java polymorphism foreach

7
推荐指数
2
解决办法
3935
查看次数

内存对齐 - Sparc(Sun)cc编译器,Intel(Linux)g ++编译器,Intel(Windows)MVSC编译器

我的问题由两部分组成.

  1. 我注意到使用cc编译器在sparc(sun)上的memalign(block_size,bytes)不会检查字节是2的幂,而不是在intel linux上的memalign和使用mvsc编译器的windows上的_aligned_malloc检查字节是否为2的力量.

这是一个阳光下的虫子,有补丁还是我需要自己写一个memalign.

  1. 另外我有一个结构(不是我的代码):

    typedef struct CLHLockStruct {
        volatile CLHLockNode CACHE_ALIGN *Tail ;
        volatile CLHLockNode CACHE_ALIGN *MyNode[N_THREADS] ;
        volatile CLHLockNode CACHE_ALIGN *MyPred[N_THREADS] ;
    } CLHLockStruct;
    
    Run Code Online (Sandbox Code Playgroud)

我在MVSC下编译(visual studio 2008):

    CACHE_LINE_SIZE = 64
    CACHE_ALIGN = __declspec(align(CACHE_LINE_SIZE)) 
    N_THREADS = 8
    sizeof(CLHLockStruct)=192
Run Code Online (Sandbox Code Playgroud)

该代码最初是为sparc架构编写的,我尝试将其迁移到MVSC而无需更改代码.

在他们的代码中他们使用memalign(CACHE_LINE_SIZE,sizeof(CLHLockStruct)),并且我已将其更改为_aligned_malloc,我的问题是sizeof(CLHLockStruct)不是2的幂,我可能会写一些函数找到下一个数字是2的力量.

他们是更好的方法吗?

EDIT1

我如何填充这个结构,使其大小为2的幂?

EDIT2

是否有一个像_aligned_malloc和malloc一样的函数:返回一个与block_size的倍数对齐的内存指针,但不要求字节为2的幂?

c++ architecture algorithm g++ memory-alignment

5
推荐指数
1
解决办法
769
查看次数

基于UnixTime的动态MySQL分区

我的数据库设计包括多个MYISAM表,在线收集测量数据,

每行记录包含自动递增的id,一些数据和表示unixtime的整数.

我正在设计一个老化机制,我有兴趣使用MySQL分区动态地基于unixtime对每个这样的表进行分区.

假设我感兴趣的是每个分区将代表单个月的数据,最后一个分区应该代表2个月,如果记录到达下一个未表示的月份,代表2个月的分区应该重新组织以代表单个月,并且新分区应该创建代表2个月(1个从最后一个分区获取,1个用于将来的测量),

此外,当创建新分区时,我感兴趣的是将丢弃最旧的分区.

  1. 我应该使用什么类型的分区(我的unixtime不是唯一的密钥,我如何使用unixtime进行分区)?
  2. 如何根据添加到表中的新记录将分区设计为完全动态?

更新12.12.12

我找到了有趣的链接到类似的方法,我已经描述了你的魔法范围分区维护查询.

mysql myisam partitioning dynamic unix-timestamp

5
推荐指数
1
解决办法
7462
查看次数

LOAD DATA 删除后回收磁盘空间

我有一个由 MYISAM 表组成的数据库模式,我有兴趣不时从某些表中删除旧记录。

我知道删除不会回收内存空间,但正如我在 DELETE 命令的描述中发现的那样,插入可能会重用删除的空间

在 MyISAM 表中,删除的行保存在链表中,后续的 INSERT 操作会重用旧的行位置。

我对 LOAD DATA 命令是否也重用已删除的空间感兴趣?

更新

我也有兴趣如何回收索引空间?

更新 2012-12-03 23:11

根据从@RolandoMySQLDBA 收到的答案提供的更多信息

执行以下建议的查询后,对于需要重用或回收空间的不同表,我得到了不同的结果:

SELECT row_format FROM information_schema.tables
WHERE table_schema='mydb' AND table_name='mytable1';
Run Code Online (Sandbox Code Playgroud)

> Dynamic

SELECT row_format FROM information_schema.tables
WHERE table_schema='mydb' AND table_name='mytable2';
Run Code Online (Sandbox Code Playgroud)

> Fixed

更新 2012-12-09 08:06

LOAD DATA 当且仅当行格式是固定的或(行格式是动态的并且有一个大小完全相同的已删除行)时,do 重用以前删除的空间(我已经通过运行一个简短的脚本进行了检查)。

好像如果row_format是动态的,就对每条记录进行完整的删除列表查找,如果没有找到确切的行大小,则不使用删除的记录,表内存使用量会增加,另外LOAD DATA还会需要更多时间来导入记录。

我会排除这里给出的答案,因为它完美地描述了所有过程。

mysql load-data-infile

4
推荐指数
1
解决办法
3182
查看次数

std :: tuple到成员函数

我仍然试图摆脱元编程,我很难过.

我想做的是创建一个类/ struct/whatever,为它提供一个std :: tuple并让它根据元组中的对象类型自动生成成员函数.目标是让类派生自MessageHandler

例如

typedef std::tuple< MessageA, MessageB, MessageC > MessageSet;

template< class T >
class MessageHandler
{
  // some magic metaprogramming would "create"...
  virtual void processMsg( const MessageA& ) = 0;
  virtual void processMsg( const MessageB& ) = 0;
  virtual void processMsg( const MessageC& ) = 0;
};
Run Code Online (Sandbox Code Playgroud)

我已经读过你不能在模板中使用虚函数,但我不知道C++ 11是否仍然如此.

谢谢.

c++ templates virtual-functions variadic-templates iterable-unpacking

3
推荐指数
1
解决办法
334
查看次数

正则表达式,grep行只包含1次出现的char

我正在寻找一个有效的正则表达式(最好是所有格),我可以用来从大文件(5Gb)中只包含一个分隔符(',')的行:

例如

X,Y
X1,Y1,Y2
X3,Y3
X4,Y4
X5,Y5,Z6
Run Code Online (Sandbox Code Playgroud)

>>> grep"???" big_file

X,Y
X3,Y3
X4,Y4
Run Code Online (Sandbox Code Playgroud)

regex grep bigdata

3
推荐指数
1
解决办法
2568
查看次数