python排序输出_如何在python中使用排序输出进行izip呢?

由于没有更好的名称,我想用Python编写一个“izip_sorted”。函数的输入是许多iterable,每一个都是排序的。输出是具有排序输出的单个iterable。在print([x for x in izip_sorted([0,4,8], [1,3,5], [12,12,42],[])])

编辑:这是一个简单的例子。真正的使用将是在大约40个输入ITerable上,每个都有大约100000个元素。每个元素都是一个类,存储一个dict并实现__cmp__,以便对元素进行排序。数据太大,不能一次全部读入。在

应打印

^{pr2}$

我有一个解决方案,但我对python还不太熟悉,我不知道它是不是很像python。这能改进吗?只有一个元素改变的排序看起来很浪费。。。在def izip_sorted(*iterables):

"""

Return an iterator that outputs the values from the iterables, in sort order

izip_sort('ABF', 'D', 'CE') --> A B C D E F

"""

iterators = [iter(it) for it in iterables]

current_iterators = []

for it in iterators:

try:

current_iterators.append((next(it), it))

except StopIteration:

pass

current_iterators.sort(key=lambda x: x[0])

while(current_iterators):

yield current_iterators[0][0]

try:

current_iterators[0] = (next(current_iterators[0][1]), current_iterators[0][1])

current_iterators.sort(key=lambda x: x[0])

except StopIteration:

current_iterators = current_iterators[1:]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值