grouper

迭代访问列表的最“ pythonic”方法是什么?

我是研究僧i 提交于 2020-02-28 03:23:24
我有一个Python脚本,它将一个整数列表作为输入,我需要一次处理四个整数。 不幸的是,我无法控制输入,或者将其作为四元素元组的列表传递。 目前,我正在以这种方式对其进行迭代: for i in xrange(0, len(ints), 4): # dummy op for example code foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3] 不过,它看起来很像“ C思维”,这使我怀疑还有一种处理这种情况的更Python的方法。 该列表在迭代后被丢弃,因此不需要保留。 也许这样的事情会更好? while ints: foo += ints[0] * ints[1] + ints[2] * ints[3] ints[0:4] = [] 不过,还是不太“正确”。 :-/ 相关问题: 如何在Python中将列表分成均匀大小的块? #1楼 此问题的理想解决方案适用于迭代器(而不仅仅是序列)。 它也应该很快。 这是itertools文档提供的解决方案: def grouper(n, iterable, fillvalue=None): #"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" args = [iter(iterable)] * n return itertools.izip

标准库中的生成器函数

随声附和 提交于 2020-01-07 19:17:40
这里主要记录流畅的Python书中P349页介绍关于内置itertoos模块中的内置生成器。(19个) 第一组是用于过滤的生成器函数:从输入的可迭代对象中产出元素的子集,而且不修改元素本身。 compress(it, selector_it) In [133]: compress? Init signature: compress(self, /, *args, **kwargs) Docstring: compress(data, selectors) --> iterator over selected data Return data elements corresponding to true selector elements. Forms a shorter iterator from selected data elements using the selectors to choose the data elements. Type: type Subclasses: 并行处理两个可迭代对象;如果selector_it中的元素是真值,产出it中对应的元素。 In [134]: com = compress('123456789',[1,0,1,False,'',True]) In [135]: com Out[135]: <itertools.compress at

TimeGrouper, pandas

匿名 (未验证) 提交于 2019-12-03 02:16:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I use TimeGrouper from pandas.tseries.resample to sum monthly return to 6M as follows: 6m_return = monthly_return.groupby(TimeGrouper(freq='6M')).aggregate(numpy.sum) where monthly_return is like: 2008-07-01 0.003626 2008-08-01 0.001373 2008-09-01 0.040192 2008-10-01 0.027794 2008-11-01 0.012590 2008-12-01 0.026394 2009-01-01 0.008564 2009-02-01 0.007714 2009-03-01 -0.019727 2009-04-01 0.008888 2009-05-01 0.039801 2009-06-01 0.010042 2009-07-01 0.020971 2009-08-01 0.011926 2009-09-01 0.024998 2009-10-01 0.005213 2009-11-01 0.016804 2009-12

Pandas: resample timeseries with groupby

匿名 (未验证) 提交于 2019-12-03 02:14:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: Given the below pandas DataFrame: In [115]: times = pd.to_datetime(pd.Series(['2014-08-25 21:00:00','2014-08-25 21:04:00', '2014-08-25 22:07:00','2014-08-25 22:09:00'])) locations = ['HK', 'LDN', 'LDN', 'LDN'] event = ['foo', 'bar', 'baz', 'qux'] df = pd.DataFrame({'Location': locations, 'Event': event}, index=times) df Out[115]: Event Location 2014-08-25 21:00:00 foo HK 2014-08-25 21:04:00 bar LDN 2014-08-25 22:07:00 baz LDN 2014-08-25 22:09:00 qux LDN I would like resample the data to aggregate it hourly by count while grouping by location

python协程详解

你说的曾经没有我的故事 提交于 2019-12-02 08:05:34
python协程详解 一、什么是协程 协程又称为微线程,协程是一种用户态的轻量级线程 协程拥有自己的寄存器和栈。协程调度切换的时候,将寄存器上下文和栈都保存到其他地方,在切换回来的时候,恢复到先前保存的寄存器上下文和栈,因此:协程能保留上一次调用状态,每次过程重入时,就相当于进入上一次调用的状态。 协程的好处: 1.无需线程上下文切换的开销(还是单线程) 2.无需原子操作(一个线程改一个变量,改一个变量的过程就可以称为原子操作)的锁定和同步的开销 3.方便切换控制流,简化编程模型 4.高并发+高扩展+低成本:一个cpu支持上万的协程都没有问题,适合用于高并发处理 缺点: 1.无法利用多核的资源,协程本身是个单线程,它不能同时将单个cpu的多核用上,协程需要和进程配合才能运用到多cpu上(协程是跑在线程上的) 2.进行阻塞操作时会阻塞掉整个程序:如io 二、了解协程的过程 1、yield工作原理 从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数。 yield在协程中的用法: 在协程中yield通常出现在表达式的右边,例如:datum = yield,可以产出值,也可以不产出--如果yield关键字后面没有表达式,那么生成器产出None。 在协程中yield也可能从调用方接受数据,调用方是通过send(datum)的方式把数据提供给协程使用,而不是next(...