谁能帮我?我正试图想出一种计算方法
>>> sum_widths = sum(col.width for col in cols if not col.hide)
Run Code Online (Sandbox Code Playgroud)
并且还要计算此总和中的项目数,而不必进行两次传递cols.
这看起来令人难以置信,但在扫描了std-lib(内置函数,itertools,functools等)之后,我甚至找不到一个可以计算迭代中成员数量的函数.我发现了这个功能itertools.count,这听起来像我想要的,但它实际上只是一个看似命名的range功能.
经过一番思考后我想出了以下内容(这很简单,除了它的钝性之外,缺少库函数可能是可以原因的):
>>> visable_col_count = sum(col is col for col in cols if not col.hide)
Run Code Online (Sandbox Code Playgroud)
但是,使用这两个函数需要两次遍历iterable,这只是错误的方式.
作为替代方案,以下功能可以满足我的需求:
>>> def count_and_sum(iter):
>>> count = sum = 0
>>> for item in iter:
>>> count += 1
>>> sum += item
>>> return count, sum
Run Code Online (Sandbox Code Playgroud)
这个问题是它需要100倍(根据timeit)生成器表达形式的总和.
如果有人能想出一个我想要的简单单行程,请告诉我(使用Python 3.3).
编辑1
伙计们,这里有很多好点子.感谢所有回复的人.我需要一段时间才能消化所有这些答案,但我会尽力选择一个来检查.
编辑2
我重复了两个简单的建议(count_and_sum功能和2个独立的sum功能)的时间,并发现我的原始时间已经过时,可能是由于在后台运行的自动安排的备份过程.
我也在这里给出了大部分优秀的建议,这些建议都是相同的模型.分析这些问题的答案一直是我相当的教育:新的用途deque,enumerate并 …
我决定重命名我家/爱好Python包中的一些目录(docto docs,testto tests,utilto utils),因为现在我已经考虑了更多,我觉得新名称更合适.我现在的一般想法是,如果容器以其内容命名,则其名称应为复数名词.
现在我已经为下一步做好准备,我hg commit想知道如何告诉Mercurial这些目录名称的变化.我是RCS软件的新手,并且只使用Mercurial几个月.当我运行hg status它时,显示这些目录中的所有文件都被删除并添加,所以我担心如果我只是这样做,hg addremove我将丢失这些目录中文件的所有更改历史记录,或者至少更改历史记录将变得支离破碎,无法追踪.我遇到过这个hg rename命令,但是文档只讨论它对单个文件的使用,而不是目录.
在进一步阅读Bryan O'Sullivan的"权威指南"后,似乎rename可以引用目录.
所以这就是我决定尝试的:
hg rename --after doc docs
hg rename --after test tests
hg rename --after util utils
hg status
hg addremove
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我这是否是在Mercurial中重命名目录的可接受和首选方法,如果没有,我该怎么做.
以下内容来自Python v3.1.2文档:
来自Python语言参考部分3.3.1基本自定义:
object.__hash__(self)
... User-defined classes have __eq__() and __hash__() methods
by default; with them, all objects compare unequal (except
with themselves) and x.__hash__() returns id(x).
Run Code Online (Sandbox Code Playgroud)
来自词汇表:
hashable
... Objects which are instances of user-defined classes are
hashable by default; they all compare unequal, and their hash
value is their id().
Run Code Online (Sandbox Code Playgroud)
从版本2.6.5开始就是如此:
Python 2.6.5 (r265:79096, Mar 19 2010 21:48:26) ...
...
>>> class C(object): pass
...
>>> c = C()
>>> id(c)
11335856
>>> hash(c)
11335856
Run Code Online (Sandbox Code Playgroud)
但在3.1.2版本中:
Python 3.1.2 …Run Code Online (Sandbox Code Playgroud)