我的程序做得不好。在一个循环中,来自每个处理器(元组列表)的数据被收集到主处理器中,主处理器需要通过删除相似的元素来清理它。在
我在网上发现了很多有趣的线索,特别是在这个网站上,关于联合名单。然而,我没能把它应用到我的问题上。 我的目标是删除其最后两个元素与列表中另一个元组相似的元组。例如:
list1=[[a,b,c],[d,e,f],[g,h,i]]
list2=[[b,b,c],[d,e,a],[k,h,i]]
the result should be:
final=[[a,b,c],[d,e,f],[g,h,i],[d,e,a]]
现在我正在使用循环和中断,但我希望这个过程更快。在
我的代码如下(result和temp是我想从中获取union的列表) 在python2.6上。在
^{pr2}$谢谢你的帮助
赫尔维
下面是我们的uniques函数。它接受参数l(list)和f(function),返回去掉重复项的list(以相同的顺序)。重复定义为:b是iff(b)==f(a)的重复。在
最后两个定义如下:
^{pr2}$对于您的问题,我们使用如下方法:
如果你描述的用例出现了很多你可能想要定义的
Identity是我们的默认f,但它可以是任何东西(只要它是为列表的所有元素定义的,因为它们可以是任何类型的)。在
f可以是列表的和,列表的奇数元素,整数的素数因子,任何东西。(只要记住,如果它是内射的就没有意义了!按常数相加,线性函数等的作用与恒等式相同,它的f(x)==f(y)w/x!=有区别的y)
我的回答很有弹性吗提高速度。对于速度与z有关的更大的列表,您希望利用散列检查和已知的list1和list2没有重复项这一事实
或者允许混乱
编辑
你应该总是能够避免非Python式的循环,就像你在你的问题中所说的那样。以下是更改循环后的确切代码:
result和temp是iterable,对于iterable的任何东西,您可以直接将其放入for循环中,而无需使用eanges。如果出于某种原因您显式需要索引(这不是这种情况,但是我上面有一个),您可以使用enumerate。在
下面是一个使用集合的简单解决方案:
但是,如果列表元组是1的话,那么就要把列表元组放在1的周围。在
相关问题 更多 >
编程相关推荐