【发布时间】:2015-01-30 18:53:18
【问题描述】:
我正在尝试编写一个适用于所提供参数的每个元素的函数,无论该参数是嵌套 python 列表、numpy 数组还是 pandas 数据框或系列。
示例:(不工作)
import numpy as np
import pandas as pd
a = [[1,2,3,4,5], [6,7,8,9,10]]
b = np.array(a)
c = pd.DataFrame(a)
def printElement(x):
print x
def iterateOverElements(arg):
for element in arg:
printElement(element)
iterateOverElements(a)
iterateOverElements(b)
iterateOverElements(c)
所需的输出:为三个调用中的每一个在新行中打印 1、2、3、4、5、6、7、8、9、10。 (顺序不重要。)
真实输出:
[1, 2, 3, 4, 5]
[6, 7, 8, 9, 10]
[1 2 3 4 5]
[ 6 7 8 9 10]
0
1
2
3
4
正如预期的那样,嵌套列表遍历其子列表,numpy 数组遍历其行,pandas 数据框遍历其列标签。
是否有一种简洁的方法来实现我的目标,或者我是否需要检查参数的实例并为不同的类型构造不同的迭代代码?如果我需要类型检查,是否有一种导入方式,例如pandas 只是为了进行类型检查并发现它毕竟是一个嵌套列表?
同样,我不关心迭代元素的顺序,只是它实际上是“基本”元素而不是某些子集合。
【问题讨论】:
-
不同的类型确实有不同的想法/设计如何迭代它们的元素。也许很不幸,但这就是目前的情况。因此,您可以检查实例类型,或者,最好将值转换为正确的类型,然后再将其传递给您的函数(类似于
iterateOverElements(b.tolist())或iterateOverElements(c.values.tolist()))。
标签: python arrays numpy pandas