Как проверить, что пустой массив содержит пустой список - PullRequest
1 голос
/ 16 апреля 2019

Вот пример кода для данных

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, которую я мог бы использовать?

1 Ответ

1 голос
/ 16 апреля 2019

Массив со смесью чисел и списков (пустой или нет) равен 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]),)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...