这是数据的示例代码
import numpy as np
myList1 = np.array([1,1,1,[1],1,1,[1],1,1])
myList2 = np.array([1,1,1,[],1,1,[],1,1])
要查看myList1中的元素是否等于[1],我可以这样做:
myList1 == [1]
但是对于myList2,要查看myList2中的元素是否等于[],我不可以这样做:
myList2 == []
我必须做:
[x == [] for x in myList2]
有没有其他方法可以在列表中查找也会处理空列表的元素?我可以使用numpy或python中的一些其他功能吗?
答案 0 :(得分:1)
包含数字和列表(空或非空)的数组为object dtype
。这实际上是list
;快速编译的numpy
数学不再有效。列表理解的唯一实用替代方法是np.frompyfunc
。
编写一个小的函数,该函数可以区分数字和列表以及列表的长度,并将其应用于数组。如果针对空白列表返回True,则np.where
将标识位置
In [41]: myList1 = np.array([1,1,1,[1],1,1,[1],1,1])
...: myList2 = np.array([1,1,1,[],1,1,[],1,1])
开发一个返回空列表为True的函数,否则为False
In [42]: len(1)
...
TypeError: object of type 'int' has no len()
In [43]: len([])
Out[43]: 0
In [44]: def foo(item):
...: try:
...: return len(item)==0
...: except TypeError:
...: pass
...: return False
...:
In [45]: foo([])
Out[45]: True
In [46]: foo([1])
Out[46]: False
In [47]: foo(1)
Out[47]: False
将其应用于数组:
In [48]: f=np.frompyfunc(foo,1,1)
In [49]: f(myList1)
Out[49]:
array([False, False, False, False, False, False, False, False, False],
dtype=object)
In [50]: np.where(f(myList1))
Out[50]: (array([], dtype=int64),)
In [51]: np.where(f(myList2))
Out[51]: (array([3, 6]),)