小编jfs*_*jfs的帖子

如何从C宏的值创建一个char字符串?

例如,如何避免两次写'func_name'?

#ifndef TEST_FUN
#  define TEST_FUN func_name
#  define TEST_FUN_NAME "func_name"
#endif
Run Code Online (Sandbox Code Playgroud)

我想遵循单点真相规则.

C预处理器的版本:

$ cpp --version
cpp (GCC) 4.1.2 20070626 (Red Hat 4.1.2-14)
Run Code Online (Sandbox Code Playgroud)

c dry c-preprocessor

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

使用strptime将带有offset的时间戳转换为datetime obj

我正在尝试使用strptime方法将格式为"2012-07-24T23:14:29-07:00"的时间戳转换为python中的datetime对象.问题在于结束时的时间偏移(-07:00).没有偏移我可以成功做到

time_str = "2012-07-24T23:14:29"

time_obj=datetime.datetime.strptime(time_str,'%Y-%m-%dT%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)

但随着我尝试的抵消

time_str = "2012-07-24T23:14:29-07:00"

time_obj=datetime.datetime.strptime(time_str,'%Y-%m-%dT%H:%M:%S-%z').
Run Code Online (Sandbox Code Playgroud)

但是它给出了一个Value错误,说"z"是一个糟糕的指令.

任何解决方案的想法?

python datetime timestamp rfc3339

49
推荐指数
3
解决办法
3万
查看次数

如何在不知道编码的情况下将字节写入Python 3中的文件?

在Python 2.x中使用'file-like'对象:

sys.stdout.write(bytes_)
tempfile.TemporaryFile().write(bytes_)
open('filename', 'wb').write(bytes_)
StringIO().write(bytes_)
Run Code Online (Sandbox Code Playgroud)

如何在Python 3中做同样的事情?

如何编写这个Python 2.x代码的等价物:

def write(file_, bytes_):
    file_.write(bytes_)
Run Code Online (Sandbox Code Playgroud)

注意:sys.stdout在语义上并不总是文本流.有时将它视为字节流可能是有益的.例如,在远程机器上制作dir /的加密存档:

tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,没有必要使用Unicode.

python io python-3.x

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

与语言X闭包相比,Python中的闭包有哪些限制?

X是任何支持某种闭包风格的编程语言(C#,Javascript,Lisp,Perl,Ruby,Scheme等).

Python中的Closures中提到了一些限制(与Ruby的闭包相比),但文章很旧,现代Python中不再存在许多限制.

查看具体限制的代码示例会很棒.

相关问题:

python closures

47
推荐指数
4
解决办法
7942
查看次数

更糟糕的是更好.有一个例子吗?

有没有一种被广泛使用的算法,该算法的时间复杂度更差比其它已知的算法,但它是一个更好的选择,所有的实际情况(更糟糕的复杂性,但更好的,否则)?

可接受的答案可能是以下形式:

有算法AB具有O(N**2)O(N)时间复杂性相应,但B 具有这样的大常数,它没有优于A为小于一个数量在宇宙原子的输入.

答案中的示例突出显示:

  • 单纯形算法 - 最坏情况是指数时间 - 凸优化问题的已知多项式时间算法相比.

  • 中位数算法的中位数 - 最坏情况O(N**2)已知O(N)算法.

  • 回溯正则表达式引擎 - 最坏情况指数基于O(N)Thompson NFA的引擎.

所有这些示例都利用了最坏情况和平均情况.

是否存在不依赖于最坏情况与平均情况之间差异的示例?


有关:

  • "更糟糕的是更好"的崛起.(出于这个问题的目的,"更糟的是更好"这个短语用于比文章更窄的(即 - 算法时间复杂度)意义上)

  • Python的设计理念:

    ABC集团力求完美.例如,他们使用基于树的数据结构算法,这些算法被证明是渐近大型集合的最佳选择(但对于小型集合来说并不是那么好).

    如果没有能够存储这些大型集合的计算机(换句话说,大型集合在这种情况下不够大),这个例子就是答案.

  • 用于方阵乘法的Coppersmith-Winograd算法是一个很好的例子(它是最快的(2008),但它不如更差的算法).还有其他人? 来自维基百科的文章:"它并没有在实践中使用,因为它只为矩阵提供了一个优势,使它们无法被现代硬件处理(Robinson 2005)."

algorithm time-complexity

47
推荐指数
11
解决办法
5770
查看次数

如何轻松打印ascii-art文字?

我有一个转储大量输出的程序,我希望其中一些输出能够真正脱颖而出.一种方法是使用ascii art渲染重要文本,例如这个Web服务就是这样:

 #    #   ##   #####  #    # # #    #  ####  
 #    #  #  #  #    # ##   # # ##   # #    # 
 #    # #    # #    # # #  # # # #  # #      
 # ## # ###### #####  #  # # # #  # # #  ### 
 ##  ## #    # #   #  #   ## # #   ## #    # 
 #    # #    # #    # #    # …
Run Code Online (Sandbox Code Playgroud)

python user-interface logging command-line text

47
推荐指数
3
解决办法
6万
查看次数

如何使用gcc打印__uint128_t数字?

PRIu128,其行为类似于PRIu64来自<inttypes.h>:

printf("%" PRIu64 "\n", some_uint64_value);
Run Code Online (Sandbox Code Playgroud)

或者手动逐位转换:

int print_uint128(uint128_t n) {
  if (n == 0)  return printf("0\n");

  char str[40] = {0}; // log10(1 << 128) + '\0'
  char *s = str + sizeof(str) - 1; // start at the end
  while (n != 0) {
    if (s == str) return -1; // never happens

    *--s = "0123456789"[n % 10]; // save last digit
    n /= 10;                     // drop it
  }
  return printf("%s\n", s);
}
Run Code Online (Sandbox Code Playgroud)

是唯一的选择吗? …

c gcc

45
推荐指数
3
解决办法
5万
查看次数

计算将一个排列转换为另一个排列所需的相邻交换

我们给出了两个小写拉丁字母字母序列.它们的长度相同,并且具有相同数量的给定类型的字母(第一个具有与第二个相同数量的t,依此类推).我们需要找到将第一个序列转换为第二个序列所需的最小交换次数(通过"交换",我们的意思是改变两个相邻字母的顺序).我们可以安全地假设每两个序列可以相互转换.我们可以用蛮力做到这一点,但序列太长了.

输入:
序列的长度(至少2,最多999999),然后是两个序列.

输出:
一个整数,表示序列变为相同所需的交换数.

示例:
{5,aaaaa,aaaaa}应输出{0},
{4,abcd,acdb}应输出{2}.

我想到的第一件事是bubblesort.我们可以简单地对每个交换的序列进行计数.问题是:a)它是O(n ^ 2)最坏情况b)我不相信它会给我每个案例的最小数字......即使是优化的bubblesort似乎也没有做到这一点.我们可以实施鸡尾酒种类来解决海龟的问题 - 但它会给我最好的表现吗?或者也许有更简单/更快的东西?

这个问题也可以表述为:当允许的唯一操作是换位时,我们如何确定两个字符串之间的编辑距离?

algorithm

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

如何从subprocess.Popen()获取输出.proc.stdout.readline()块,没有数据打印出来

我想从执行Test_Pipe.py输出,我尝试在Linux上使用代码,但它没有用.

Test_Pipe.py

import time
while True :
    print "Someting ..."
    time.sleep(.1)
Run Code Online (Sandbox Code Playgroud)

Caller.py

import subprocess as subp
import time

proc = subp.Popen(["python", "Test_Pipe.py"], stdout=subp.PIPE, stdin=subp.PIPE)

while True :
    data = proc.stdout.readline() #block / wait
    print data
    time.sleep(.1)
Run Code Online (Sandbox Code Playgroud)

该行proc.stdout.readline()被阻止,因此没有数据打印出来.

python linux subprocess popen

38
推荐指数
4
解决办法
9万
查看次数

ISO到datetime对象:'z'是一个错误的指令

我正在尝试将ISO转换为datetime使用以下代码:

dt = datetime.datetime.strptime("2013-07-23T15:10:59.342107+01:00",
                                "%Y-%m-%dT%H:%M:%S.%f%z")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z'
Run Code Online (Sandbox Code Playgroud)

将格式上面的ISO字符串转换为对象的最佳方法是什么datetime?我使用的是Python 2.7.6版.

python datetime iso rfc3339

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