假设你有这个字符串:
ABCDEFGH
Run Code Online (Sandbox Code Playgroud)
你想要扭转它,使它成为:
GHEFCDAB
Run Code Online (Sandbox Code Playgroud)
什么是最有效/ pythonic解决方案?我尝试了一些不同的东西,但它们看起来都很糟糕......
提前致谢!
更新:
如果有人感兴趣,这不是为了做作业.我有一个脚本处理来自网络捕获的数据并将其作为一个十六进制字节字符串返回.问题是数据仍处于网络状态.由于应用程序的编写方式,我不想回过头来尝试使用say socket.htons,我只想反转字符串.
不幸的是,我的尝试似乎很可怕,我知道必须有一个更好的方法(一个更加pythonic的解决方案) - 因此我的问题在这里.
我听说在创建哈希时,如果使用小文件或数据量,结果哈希可能会更容易发生冲突.如果这是真的,是否应该使用最少的"安全"数据来确保不会发生这种情况?
我猜这个问题也可以表达为:
可以安全可靠地散列的最小数据量是多少?
我很确定这最终会成为一个非常明显的问题,这就是为什么我没有找到关于它的更多信息.不过,我认为值得问:)
基本上,使用结构访问数据非常快.如果数据以可以立即作为结构处理的形式从网络中传出,从性能的角度来看,这是非常好的.
但是,是否可以动态定义结构.客户端和服务器应用程序是否可以协商数据流的格式,然后将该定义用作结构?
如果没有,有没有更好的方法呢?
谢谢大家!
可能是一个简单的,但我查看了文档并搜索了示例,我仍然不确定答案.
如果我有这样的列表:
[1,2,3,4,5,6,7,8,9,0]
Run Code Online (Sandbox Code Playgroud)
我想提取一个切片,比如从索引4到索引8,即我想要:
[5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
在Haskell中这样做的惯用方法是什么?
我有相当多的编程经验,但它都是高级语言.我最近选择了C,那个项目进展顺利,学习经验非常值得.
现在我想更进一步学习汇编语言,但理想情况下我想在嵌入式平台上学习,因为我看到了我未来的一些项目.问题是,哪个是初学者的最佳起点或"套件"?
我正在寻找一些相当容易组合的东西,可以做"真实世界"的事情,并且通常提供一个可以建立的良好基础.
我有一个大型CSV文件,其中包含需要花费大量精力才能处理的独立项目.我希望能够并行处理每个订单项.我在这里找到了一个用于在SO上处理CSV文件的示例代码:
代码是:
(use '(clojure.contrib duck-streams str-utils)) ;;'
(with-out-writer "coords.txt"
(doseq [line (read-lines "coords.csv")]
(let [[x y z p] (re-split #"," line)]
(println (str-join \space [p x y z])))))
Run Code Online (Sandbox Code Playgroud)
这能够从我的CSV文件打印出来的数据非常棒 - 但它只使用了一个CPU.我尝试了各种不同的东西,结果是:
(pmap println (read-lines "foo"))
Run Code Online (Sandbox Code Playgroud)
这在交互模式下工作正常,但在从命令行运行时不执行任何操作.从IRC上的对话来看,这是因为默认情况下stdout不可用于线程.
我真正想要的是一种将函数应用于CSV文件的每一行并且并行执行此操作的方法.如果可能的话,我还想在测试期间将一些结果打印到stdout.
有任何想法吗?
假设您已确定对于给定的利基案例,TCP或UDP都不是理想的,您将如何编写自己的基于IP的协议?
例如,如果您正在Linux上进行开发,那么您在哪里可以查看内核中的"挂钩"协议?
你会从哪里开始的?
我已经创建了一个包含4个工作线程的池来处理一些文件.在测试中,大约有200个.线程池版本已经比顺序执行快3倍,但还有改进的余地.
最大的瓶颈(忽略磁盘I/O)是我需要实例化一个新的MessageDigest对象.在单线程版本中我只有1.在这个版本中我有200.
我想知道的是,是否有可能在工作池中的线程有一个本地变量?那样(假设没有线程死掉),MessageDigest对象只有四个实例,而不是200个......
每个任务都需要摘要,所以我不确定是否有更好的方法来做到这一点......
我试图使用ThreadLocal对象,但我应该在哪里创建它?如果我在任务本身创建它,我猜它在任务完成时就会脱离上下文.每次创建新实例时.我的代码是:
ThreadLocal<GenerateSHA1> tl = new ThreadLocal<GenerateSHA1>();
hashMaker = tl.get();
if(hashMaker == null){
hashMaker = new GenerateSHA1();
tl.set(hashMaker);
}
Run Code Online (Sandbox Code Playgroud)
这是从任务的构造函数内部完成的.
UPDATE
好吧,让它成为静态的工作,因为对象不会丢失 - 但它现在突出显示了一个不同的问题.工作"任务"在主线程中创建,然后使用invokveAll()添加到ExecutorService.
关于如何解决这个问题的任何想法?
捕获网络流量以进行调试时,似乎有两种常见方法:
使用原始套接字.
使用libpcap.
在性能方面,这两种方法之间有很大差异吗?libpcap似乎是一种很好的兼容方式来收听真实的网络连接或重放一些固定数据,但是这个功能集是否会带来性能损失?
我不认为这是重复的,因为该函数的确返回了快乐路径。使用该属性no-return
可使编译器在该函数永不返回的假设下进行优化,此处并非如此。
我有C代码,它要么返回指针,要么调用另一个函数退出程序。这是在if
语句中,因此它要么返回结果,要么退出。当函数返回a时void *
,编译器警告该函数可能不会返回值(这当然是对的):
error: control reaches end of non-void function [-Werror=return-type]
我可以通过仅添加return *temp;
到函数的末尾来解决此问题,但是我想通过使用未使用的变量属性之类的东西来弄清楚我的意图:
__attribute__((__unused__))
这样,我可以-Wall
继续使用,而不必添加不必要的或可能引起混淆的代码。
如果有更好的方式表达这种意图,我也愿意重写代码。
该代码如下所示:
void *get_memory() {
void *temp = malloc(100);
if (temp) {
// do some setup work
return temp;
} else {
exit_program_with_epic_fail();
}
// Compiler warns if the following line isn't present
return temp;
}
Run Code Online (Sandbox Code Playgroud)