小编Don*_*ell的帖子

需要一种快速计算方法并在一次传递中对可迭代求和

谁能帮我?我正试图想出一种计算方法

>>> 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 python-3.x

46
推荐指数
7
解决办法
2万
查看次数

如何在Mercurial中重命名目录并继续跟踪所有文件更改

我决定重命名我家/爱好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 mercurial

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

与Python 3.1 Docs相反,hash(obj)!= id(obj).哪个是正确的?

以下内容来自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)

python hash

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

标签 统计

python ×3

hash ×1

mercurial ×1

python-3.x ×1