Python中元组的元素运算

ast*_*y13 6 python python-3.x

是否有任何内置函数允许对Python 3中的元组进行元素操作?如果没有,执行这些操作的"pythonic"方式是什么?

例如:我想借此之间的百分比差异a,并b与他们比较了一些门槛th.

>>> a = (1, 2, 4)
>>> b = (1.1, 2.1, 4.1)
>>> # compute pd = 100*abs(a-b)/a = (10.0, 5.0, 2.5)
>>> th = 3
>>> # test threshold: pd < th => (False, False, True)
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 9

没有内置方式,但有一种非常简单的方法:

[f(aItem, bItem) for aItem, bItem in zip(a, b)]
Run Code Online (Sandbox Code Playgroud)

...这里f是要应用的elementwise功能.对于你的情况:

[100*abs(aItem - bItem)/aItem < 3 for aItem, bItem in zip(a, b)]
Run Code Online (Sandbox Code Playgroud)

如果你发现自己做了很多,特别是对于长元组,你可能想看一下Numpy,它提供了一个功能齐全的向量操作系统,其中许多常见的向量函数(基本操作,触发函数等)都是元素应用的.


bpg*_*rgo 6

地图功能

>>> a = (1, 2, 4)
>>> b = (1.1, 2.1, 4.1)
>>> map(lambda a,b: 100*abs(a-b)/a < 3, a, b)
[False, False, True]
Run Code Online (Sandbox Code Playgroud)

编辑

当然不是地图,你可以使用列表推导,比如BrenBarn做 http://docs.python.org/tutorial/datastructures.html#nested-list-comprehensions

删除了EDIT 2 zip,感谢DSM指出不需要拉链

  • 你这里不需要`zip`; 你可以写`map(lambda a,b:100*abs(ab)/ a <3,a,b)`.[注意这个函数接受两个参数,而不是一个2元组.] (2认同)

Ray*_*Ray 5

为什么不使用NumPy?

import numpy as np
a = np.array([1,2,4])
b = np.array([1.1, 2.1, 4.1])

pd = 100*abs(a-b)/a # result: array([ 10. ,   5. ,   2.5])
th = 3
pd < th # result: array([False, False,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)