Tag: python

生成所有5张牌扑克牌

这个问题乍一看听起来很简单,但是看起来比现在复杂得多。 这让我难以忍受。 有52c5 = 2,598,960种方式从52张牌组中select5张牌。 然而,由于套装在扑克中是可以互换的,其中许多是等价的 – 手牌2H 2C 3H 3S 4D相当于2D 2S 3D 3C 4H – 简单地交换套装。 根据维基百科 ,一旦你考虑可能的西装颜色,有134459个不同的5张牌。 问题是,我们如何有效地产生所有这些可能的手? 我不希望产生所有的手,然后消除重复,因为我想将问题应用到更大数量的牌上,并且手的数量要评估快速螺旋失控。 我目前的尝试主要集中在深度优先生成和跟踪当前生成的卡片上,以确定下一张卡片或宽度优先的卡片和行列是否有效,生成所有可能的下一张卡片,然后通过转换每个卡片来删除重复通过重新着色来达到“规范”版本。 以下是我在Python中的广度优先解决scheme的尝试: # A card is represented by an integer. The low 2 bits represent the suit, while # the remainder represent the rank. suits = 'CDHS' ranks = '23456789TJQKA' def make_canonical(hand): suit_map […]

从Python中的“with”块(以及为什么)产生安全吗?

协程和资源获取的结合似乎可能会带来一些意想不到的(或不直观的)后果。 基本的问题是这样的事情是否有效: def coroutine(): with open(path, 'r') as fh: for line in fh: yield line 它做的。 (你可以testing它!) 更深层次的问题是,应该是finally的替代scheme,在那里确保资源在块的末尾被释放。 协程可以暂停和恢复执行,那么冲突是如何解决的呢? 例如,如果在协程尚未返回的情况下,在协同程序内部和外部使用读/写打开文件: def coroutine(): with open('test.txt', 'rw+') as fh: for line in fh: yield line a = coroutine() assert a.next() # Open the filehandle inside the coroutine first. with open('test.txt', 'rw+') as fh: # Then open it […]

什么是在lambda自动元组解压缩好的python3等价物?

考虑下面的python2代码 In [5]: points = [ (1,2), (2,3)] In [6]: min(points, key=lambda (x, y): (x*x + y*y)) Out[6]: (1, 2) 这在python3中不被支持,我必须执行以下操作: >>> min(points, key=lambda p: p[0]*p[0] + p[1]*p[1]) (1, 2) 这很丑陋。 如果lambda是一个函数,我可以做 def some_name_to_think_of(p): x, y = p return x*x + y*y 在python3中删除这个特性迫使代码以丑陋的方式(用神奇的索引)或者创build不必要的函数(最麻烦的部分是为这些不必要的函数考虑好名字) 我认为这个function至less应该添加到lambdaexpression式中。 有一个很好的select吗? 更新:我正在使用下面的助手在答案中延伸的想法 def star(f): return lambda args: f(*args) min(points, key=star(lambda x,y: […]

为什么Python中没有list.clear()方法?

受这个问题的启发。 为什么Python中没有list.clear()方法? 我在这里发现了几个问题,说明正确的做法是以下几点,但没有人说为什么不只是一个方法。 del lst[:] lst[:] = [] 虽然这可能违背了“python之禅”有不止一种做法,但对我来说,有一个“list.clear()”方法当然更为明显。 它也符合指令和集合,两者都有.clear()。 我偶然发现了一些有关python-dev和python的文章,并没有给出明确的答案(参见这里 (2006)和here (2009))。 Guido有权衡吗? 这只是一个争论点,在过去的4-5年里还没有解决吗? 更新: list.clear()被添加到3.3的Python中 – 请参阅此处

Linux系统上的Python互斥体

在Linux上有什么简单的方法在Python上进行系统互斥? “系统范围”是指一组Python 进程使用互斥锁; 这与传统的互斥体形成对比,传统的互斥体在同一过程中被一组线程所使用。 编辑:我不知道Python的multiprocessing包是我所需要的。 例如,我可以在两个不同的解释器中执行以下操作: from multiprocessing import Lock L = Lock() L.acquire() 当我在两个单独的解释器中同时执行这些命令时,我想让其中一个挂起。 相反,两者都没有挂起。 看起来他们并没有获得相同的互斥量。

什么是分配python命令行工具的最佳方法?

我目前的setup.py脚本工作正常,但它将tvnamer.py (工具)作为tvnamer.py到网站包或类似的地方.. 我可以使setup.py安装tvnamer.py作为tvnamer ,和/或有更好的安装命令行应用程序的方法吗?

Pythonic的方式分裂成一个列表,rest?

我想在Python 3中,我将能够做到: first, *rest = l 这正是我想要的,但我使用的是2.6。 现在我正在做: first = l[0] rest = l[1:] 这很好,但我只是想知道是否有更优雅的东西。

get_or_create()是否必须立即保存? (Django的)

我需要使用像get_or_create(),但问题是,我有很多字段,我不想设置默认值(这是没有意义的),如果我不设置默认值,它返回一个错误,因为它显然保存了对象。 我可以将字段设置为null = True,但我不想要空字段。 是否有其他方法或任何额外的参数可以发送到get_or_create(),以便它实例化一个对象,但不保存它,直到我调用save()? 谢谢。

在DataFrame索引上应用函数

在Pandas DataFrame的索引上应用函数的最佳方法是什么? 目前我正在使用这种详细的方法: pd.DataFrame({"Month": df.reset_index().Date.apply(foo)}) 其中Date是索引的名称, foo是我正在应用的函数的名称。

三重inheritance导致元类冲突…有时

看起来我偶然发现了一个元类的地狱,即使我不想和它有任何关系。 我正在使用PySide在Qt4中编写一个应用程序。 我想将事件驱动的部分从Qt Designer文件生成的UI定义中分离出来。 因此,我创build了一个“控制器”类,但为了缓解我的生活,我多次inheritance它们。 一个例子: class BaseController(QObject): def setupEvents(self, parent): self.window = parent class MainController(BaseController): pass class MainWindow(QMainWindow, Ui_MainWindow, MainController): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setupUi(self) self.setupEvents(self) 这按预期工作。 它也有从( QDialog , Ui_Dialog , BaseController )inheritance。 但是,当我的子类BaseController并尝试从所述的子类(代替BaseController )inheritance,我收到一个错误: TypeError:调用元类时出错基类元类冲突:派生类的元类必须是其所有元的元类的(非严格)子类 说明: QMainWindow和QDialog都从QObjectinheritance。 由于Qt事件系统的特性, BaseController也必须inheritance它。 Ui_类只能从简单的Python对象类inheritance。 我寻找解决scheme,但都涉及故意使用元类的情况。 所以我一定在做一些非常错误的事情。 编辑:我的描述可能会更清楚通过添加graphics。 工作示例: QObject | \___________________ | object | QMainWindow […]