我对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) 我问了这个问题并得到了一个很好的答案(谢谢!).要解决的部分问题包括采用单词并对其进行逐行扫描,以便获得两个单词,一个包含原始单词的偶数索引字符,另一个包含奇数索引字符.
响应者使用以下代码执行此操作:
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)
好吧,出于多种原因,我的方式更糟糕.但在我看来似乎两种方式至少应该产生相同的单词对.然而,我使用他的实现得到的结果不同于我的结果.这是为什么?