相关疑难解决方法(0)

为什么Python中的程序比Objective-C更快?

我对Python 中这个用于循环遍历大词列表的算法的小例子感兴趣.我正在写一些"工具",这将允许我以与Python类似的方式切片Objective-C字符串或数组.

具体来说,这个优雅的解决方案引起了我的注意,非常快速地执行,它使用字符串切片作为算法的关键元素.尝试解决这个没有切片!

我使用下面的Moby单词列表复制了我的本地版本./usr/share/dict/words如果您不想下载Moby,可以使用.源只是一个类似于字典的大型独特单词列表.

#!/usr/bin/env python

count=0
words = set(line.strip() for line in   
           open("/Users/andrew/Downloads/Moby/mwords/354984si.ngl"))
for w in words:
    even, odd = w[::2], w[1::2]
    if even in words and odd in words:
        count+=1

print count      
Run Code Online (Sandbox Code Playgroud)

这个脚本将a)由Python解释; b)读取4.1 MB,354,983字的Moby字典文件; c)剥去线条; d)将线条放入一组,并且; e)并找到所有组合,其中平均值和给定单词的几率也是单词.这在MacBook Pro上执行约0.73秒.

我试图在Objective-C中重写相同的程序.我是这种语言的初学者,所以请放轻松,但请指出错误.

#import <Foundation/Foundation.h>

NSString *sliceString(NSString *inString, NSUInteger start, NSUInteger stop, 
        NSUInteger step){
    NSUInteger strLength = [inString length];

    if(stop > strLength) {
        stop = strLength;
    }

    if(start > strLength) { …
Run Code Online (Sandbox Code Playgroud)

python objective-c nsstring

18
推荐指数
1
解决办法
1279
查看次数

为什么这两个实现产生不同的结果?

我问了这个问题并得到了一个很好的答案(谢谢!).要解决的部分问题包括采用单词并对其进行逐行扫描,以便获得两个单词,一个包含原始单词的偶数索引字符,另一个包含奇数索引字符.

响应者使用以下代码执行此操作:

for w in words:
    even, odd = w[::2], w[1::2]
Run Code Online (Sandbox Code Playgroud)

我做了这个(更糟)的方式:

for w in words:
    lst1 = []
    lst2 = []
    for c in w:
        if w.index(c) % 2 == 0:
            lst1.append(c)
        else:
            lst2.append(c)
    even = ''.join(lst1)
    odd = ''.join(lst2)
Run Code Online (Sandbox Code Playgroud)

好吧,出于多种原因,我的方式更糟糕.但在我看来似乎两种方式至少应该产生相同的单词对.然而,我使用他的实现得到的结果不同于我的结果.这是为什么?

python

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

标签 统计

python ×2

nsstring ×1

objective-c ×1