我有:
>>> As = [1, 2, 5, 6]
>>> Bs = [2, 3, 4, 5]
我想要下面的zip_fn
:
换句话说,给定两个任意序列As
和Bs
,我想要生成一个元组列表Rs
,这样满足cmp(a, b) == 0
的选择将成对地组合成它们自己的元组(a, b)
,但是那些在{(a, None)
和{
一些要点:
As
或{Rs
可以是生成相同序列的迭代器。在Rs
的顺序并不重要。在我已经实现了一些满足功能需求的东西,使用直接的预排序循环,但它大约有30行。我正在寻找一种能更好地利用内置函数或itertools
式库的东西,以获得更短的代码和更快的(C本机)运行。在
编辑:
我应该说得更清楚些。尽管为了简洁起见,我在上面的示例中使用了一系列普通数字,但我实际使用的元素是元组,cmp
只测试元组的一部分是否相等。将元素看作是记录和cmp
是匹配键字段的东西可能更容易。我可以将元素包装在一个类中并使其在键上散列,但是这样的设置对于其他任何东西都是不需要的,所以任何需要这样做的解决方案都会得到额外的代码和运行时开销。在
作为以上几点的补充:
cmp
用于比较,因为它不是基本相等的测试。在[(a, b)]
,a
应该与As
中的一个元素是相同的实例,b
是{None
。在As
和Bs
中的元素不可散列。在
我想这和你已经拥有的相似:
我知道这并没有考虑
cmp()
操作,但希望它能有所帮助。在和列表比较一样:
^{pr2}$但是,时间复杂度将是n^2,因为我们无法根据您的描述判断一个元素是否比另一个元素大。在
相关问题 更多 >
编程相关推荐