当前位置:  开发笔记 > 编程语言 > 正文

Python元素方面的元组操作,如sum

如何解决《Python元素方面的元组操作,如sum》经验,为你挑选了8个好方法。

反正有没有让Python中的元组操作像这样工作:

>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(4,4,4)

代替:

>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(1,2,3,3,2,1)

我知道它的工作原理是这样的,因为这些__add____mul__方法的定义是这样的.那么唯一的方法就是重新定义它们吗?



1> ironfroggy..:
import operator
tuple(map(operator.add, a, b))


`tuple([item1 + item2 for item1,item2 in zip(a,b)])`将等同于列表理解.
@AdamParkin,生成器理解甚至更好`元组(item1 + item2 for item1,item2 in zip(a,b))`.
我会说这是最pythonic的解决方案.
除了map()是半弃用的.有关Guido的文章,请参阅http://www.artima.com/weblogs/viewpost.jsp?thread=98196,其中提到了如何将地图更好地编写为列表理解.

2> Triptych..:

使用所有内置插件..

tuple(map(sum, zip(a, b)))


这很好,但技术上不是要求的,因为map返回一个列表,而不是一个元组......所以:`tuple(map(sum,zip(a,b))`
语法是神秘的.
这似乎是更简单,更好的答案。为什么不接受?
这一个的好处是您可以将其扩展为:`tuple(map(sum(zip,zip(a,b,c)))`

3> 小智..:

此解决方案不需要导入:

tuple(map(lambda x, y: x + y, tuple1, tuple2))


这个解决方案也比其他无需导入的单线解决方案更快(`map(sum,zip(a,b))`)

4> Dana..:

排序结合前两个答案,对ironfroggy的代码进行调整,以便返回一个元组:

import operator

class stuple(tuple):
    def __add__(self, other):
        return self.__class__(map(operator.add, self, other))
        # obviously leaving out checking lengths

>>> a = stuple([1,2,3])
>>> b = stuple([3,2,1])
>>> a + b
(4, 4, 4)

注意:使用self.__class__而不是stuple简化子类化.



5> 小智..:
from numpy import *

a = array( [1,2,3] )
b = array( [3,2,1] )

print a + b

array([4,4,4]).

请参阅http://www.scipy.org/Tentative_NumPy_Tutorial


这样可以工作,但是为了简单的加法操作导入numpy有点重.

6> 小智..:

可以使用生成器理解来代替地图.内置的地图功能并不过时,但对于大多数人而言,它比列表/生成器/字典理解的可读性低,因此我建议不要使用地图功能.

tuple(p+q for p, q in zip(a, b))



7> 小智..:

没有返回元组的类定义的简单解决方案

import operator
tuple(map(operator.add,a,b))



8> Mike..:

所有发电机解决方 不确定性能(尽管itertools很快)

import itertools
tuple(x+y for x, y in itertools.izip(a,b))

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有