Python 对所有元素的通用迭代:嵌套列表、numpy数组、数据帧
我试图编写一个应用于所提供参数的每个元素的函数,无论该参数是嵌套python列表、numpy数组还是数据帧或序列 示例:(不工作) 所需输出:为三次调用中的每一次打印新行1、2、3、4、5、6、7、8、9、10。(秩序不重要。) 真实输出:Python 对所有元素的通用迭代:嵌套列表、numpy数组、数据帧,python,arrays,numpy,pandas,Python,Arrays,Numpy,Pandas,我试图编写一个应用于所提供参数的每个元素的函数,无论该参数是嵌套python列表、numpy数组还是数据帧或序列 示例:(不工作) 所需输出:为三次调用中的每一次打印新行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 dataframe上进行迭代
[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 dataframe上进行迭代
是否有一种简洁的方法来实现我的目标,或者我是否需要检查参数的实例并为不同的类型构造不同的迭代代码?如果我需要进行类型检查,是否有一种方法可以导入例如pandas,只需进行类型检查并发现它毕竟是一个嵌套列表
同样,我不关心迭代元素的顺序,只关心它实际上是“基本”元素,而不是某个子集合。我建议如下:
def printElements(arg):
x = arg.iterrows() if isinstance(arg, pd.DataFrame) else arg
try:
for element in x:
printElements(element)
except:
print x
将所有内容都转换为NumPy数组,并使用
平面
迭代器:
def iterateOverElements(arg):
for element in np.asarray(arg).flat:
printElement(element)
不同的类型确实有不同的想法/设计如何迭代它们的元素。也许很不幸,但这就是目前的情况。因此,您可以检查实例类型,或者最好在将值传递到函数之前将其转换为正确的类型(类似于
iterateOverElements(b.tolist())
或iterateOverElements(c.values.tolist())
)。这需要始终导入numpy,即使使用纯python嵌套列表调用了iterateOverElements。如果可能的话,这是我想避免的事情但到目前为止,这是最紧凑的解决方案。
def iterateOverElements(arg):
for element in np.asarray(arg).flat:
printElement(element)