Вот как заставить numpy делать то, что вы хотите:
listoftups=[("a", "b"), ("n"), ("c","d","e"), ("f", "g")]
where
работает с логическими массивами, сравнение типа a == b создаст логический массив, если a или b это пустой массив, но не если оба являются нативными объектами Python. Давайте также создадим пример с двумя вхождениями поискового кортежа.
.
arroftups = np.array(listoftups)
twice = np.concatenate(2*[listoftups])
- Одной из незначительных проблем является предотвращение попытки широковещательной передачи при обнаружении двухэлементного тестового набора. Мы можем сделать это, заключив его в массив 0d
.
probe = np.empty((),object)
probe[()] = "a", "b"
- Теперь мы готовы идти:
.
np.where(arroftups==probe)
# (array([0]),)
np.where(twice==probe)
# (array([0, 4]),)
Обратите внимание: если вы уверены, что в тестовом кортеже есть только один случай, решение @ Watchdog101, вероятно, будет лучше. Но это не будет работать в общем случае.