小编beh*_*all的帖子

Underscore _作为Python中的变量名

Peter Norvig 通过结合确定性逻辑运算和可能解决方案的智能遍历,撰写了一篇描述解决数独难题程序的文章,即使是最困难的难题.后者是递归完成的; 这是该功能(来源):

def search(values):
    "Using depth-first search and propagation, try all possible values."
    if values is False:
        return False ## Failed earlier
    if all( len( values[s]) == 1 for s in squares): 
        return values ## Solved!
    ## Chose the unfilled square s with the fewest possibilities
    _,s = min( (len( values[s]), s) 
                for s in squares 
                if len(values[s]) > 1
            )
    return some( search( assign( values.copy(), s, d)) 
                for d …
Run Code Online (Sandbox Code Playgroud)

python variables naming-conventions metasyntactic-variable

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

寻找(c)迷你语言的lisp示例,即DSL

阅读精心编写的代码似乎可以帮助我学习一门语言.(至少它与C合作.)[删除问题的"过度指定"部分]

我特别感兴趣的是lisp作为一种适合创建特定于问题的迷你语言或DSL的语言的声誉.当然,该程序应该是开源的,并且最好通过网络获得.

我用Google搜索并找到了这个例子:

http://lispm.dyndns.org/news?ID=NEWS-2005-07-08-1

有人有另一个吗?(是的,我会继续阅读"Practical Common Lisp".)

11个小时后(仅11个小时!):谢谢大家.多么棒的网站,以及一堆好的答案和提示!

lisp open-source common-lisp

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

用于memoize的Python func_dict; 其他有用的技巧?

Python函数对象有一个属性字典func_dict,在函数外部可见并且是可变的,但在调用函数时不会被修改.(我从昨天问过的问题的答案(#1753232)中学到了这一点:谢谢!)我正在阅读代码(http://pythonprogramming.jottit.com/functional_programming),它记住了Fibonacci数字的计算并思考,"为什么不使用该func_dict属性进行记忆?" 它起作用了(见下文;代码末尾的输出).这有点像有一个类属性,但在对象外面有初始化代码(在这种情况下,不是类而是函数).

我想知道使用这个属性可以做什么相似(或不同)的技巧

def fib(n):
    if n in fib.cache:
        print "found fib.cache[%d] = %d: " %(n, fib.cache[n])
        return fib.cache[n]
    else:
        print "fib.cache[%d] = fib(%d) + fib(%d)" % (n, n-1, n-2)
        fib.cache[n] = fib(n-1) + fib(n-2)
        print "modified fib.cache: ", fib.cache
        return fib.cache[n]

fib.cache = {0:0, 1:1}

for x in range(7):
    print "==================>", x
    print fib( x)

"""
==================> 0
found fib.cache[0] = 0: 
0
==================> 1
found fib.cache[1] = 1: 
1
==================> …
Run Code Online (Sandbox Code Playgroud)

python dictionary function memoization fibonacci

6
推荐指数
1
解决办法
3172
查看次数

bash/cygwin/$ PATH:我真的必须重启才能改变$ PATH吗?

我想使用安装在cygwin下的Python而不是直接在WinXP下安装的Python,所以我编辑了〜/ .bashrc并获取了它.没有改变.我尝试了其他的东西,但我没有做任何改变$ PATH的事情.所以我重新启动了.啊哈; 现在$ PATH已经改变为我想要的.

但是,谁能解释为什么会发生这种情况?什么时候通过cygwin(和bash)对环境(及其变量)的更改只在重启后生效?

(这有什么方法可以运行铁路?)(这个问题不太可能赢得任何积分,但我很好奇,而且我也厌倦了涉及这方面没有帮助的文档.)

python bash cygwin reboot path

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

def next()for Python pre-2.6?(而不是object.next方法)

Python 2.6+和3.*有next(),但2.6之前只提供了object.next方法.有没有办法在2.6之前获得next()样式; 一些"def next():"建筑也许?

python next

5
推荐指数
2
解决办法
534
查看次数

找到 KenKen 谜题“乘法”域中所有可能的因子

KenKen 拼图是一个拉丁方格,分为边连接的域:单个单元格、同一行或同一列中的两个相邻单元格、排成一行或一个单元的三个单元格等。每个域都有一个标签,给出一个目标数字和单个算术运算(+-*/),该算术运算将应用于域单元中的数字以产生目标数字。(如果域只有一个单元格,则没有给出运算符,只是一个目标 --- 平方已为您解出。如果运算符是 - 或 /,则域中只有两个单元格。)难题是(重新)构建与域的边界和标签一致的拉丁方。(我想我只见过一次具有非唯一解决方案的谜题。)

单元格中的数字范围可以从 1 到拼图的宽度(高度);通常,拼图的一侧有 4 或 6 个单元格,但也可以考虑任何大小的拼图。已发布的谜题(4x4 或 6x6)中的域通常不超过 5 个单元格,但是,这似乎并不是硬性限制。(然而,如果这个谜题只有一个域,那么该维度的拉丁方就有多少个解……)

编写 KenKen 求解器的第一步是拥有可以在任何域中生成可能的数字组合的例程,首先忽略域的几何形状。(线性域,如一行三个单元格,在已解决的谜题中不能有重复的数字,但我们暂时忽略这一点。)我已经能够编写一个 Python 函数来逐个处理添加标签:给它拼图的宽度、域中的单元格数量以及目标总和,并且它返回与目标相加的有效数字的元组列表。

乘法的情况让我困惑。我可以获得一本字典,其键等于给定大小的拼图中给定大小的域中可达到的乘积,其值是包含给出乘积的因素的元组列表,但我无法解决问题例行公事,甚至不是一件坏事。

将给定的乘积分解为素数似乎很容易,但是将素数列表划分为所需数量的因子却让我感到困惑。(我沉思过 Knuth 的 TAOCP 第 4 卷第 3 卷,但我还没有学会如何“理解”他的算法描述,所以我不知道他的集合划分算法是否是一个起点。理解 Knuth 的描述可能是另一个问题!)

我很高兴预先计算公共域和谜题大小的“乘法”字典,并将加载时间记入开销,但这种方法似乎不是一种有效的方法来处理,比如说,一侧有 100 个单元格的谜题,域大小从 2 到 50 个单元格。

python algorithm partitioning prime-factoring

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

Python中的"切片列表"和"省略号"; 使用切片列表切割列表和列表

原始问题:有人可以告诉我如何使用"切片列表"和"省略号"吗?它们什么时候有用?谢谢.

这是语言定义所说的关于"slice_list"和"省略号"的内容; Alex Martelli的答案指出了他们的起源,这不是我想象的.

[ http://docs.python.org/reference/expressions.html#tok-slicing][1]

5.3.3.Slicings

extended_slicing :: = primary"["slice_list"]"

slice_list :: = slice_item(","slice_item)*[","]

slice_item :: = expression | proper_slice | 省略

省略号:: ="..."

[1]:http: //docs.python.org/reference/expressions.html#tok-slicing

如果有人(像我一样)正在寻找使用切片列表攻击列表(或列表列表)的方法,这里有5种方法可以从列表中获取由切片列表选择的元素列表以及2种对列表列表执行相同操作的方法,在这种情况下,每个列表应用一个切片.输出在最后的注释中.我发现h5是一个使用嵌套for循环的例子,如果没有使用(更新)有意义的变量名,最难理解.

#!/usr/bin/env python



import itertools

puz = [(i + 100) for i in range(40)]
puz1 = list( puz)
puz2 = [(i + 200) for i in range(40)]
puz3 = [(i + 300) for i in range(40)]
puzs = [puz1,puz2,puz3]

sa = slice( 0,1,1)
sb = slice( 30,39,4)
sc = slice( -1, …
Run Code Online (Sandbox Code Playgroud)

python list slice python-itertools

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

Cygwin提供4543种可能性; 这是什么意思?

家里有一只新的小猫有在我工作的时候拜访我的习惯,它能够让我的系统用一些我不知道可能的爪子来做事.Windows改变了他们的堆叠顺序,浏览器放大了以前关闭的页面的部分......但是,当我在我的cygwin控制台窗口前面的窗口中使用vim工作时,小猫走过键盘的左端.cygwin窗口移到前面,cygwin光标从提示符下移一行,打印出来:

显示所有4543种可能性?(是或否)

我按了'n',但我想知道是否有人可以告诉我我的小猫按下什么键以及它醒来了什么.我已经使用UNIX多年了,但是这条消息没有任何响亮.

命令完成的TAB*2 :-)你们人很棒.我希望我能给你们所有人的答案!谢谢.我会告诉那只猫.

bash cygwin

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