Отличие двух вложенных списков. Ошибка: истинное значение массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all () - PullRequest
0 голосов
/ 12 июля 2020

Я хочу получить те значения new_pattern_dataset, которых нет в all_pattern_dataset. Я пишу следующий код:

new_pattern_dataset=[x for x in new_pattern_dataset if x not in all_pattern_dataset]

где

print(type(new_pattern_dataset))
new_pattern_dataset
OUTPUT:
[(1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0),
 (0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1),
.
.
.
(1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0),
 ...]
print(type(all_pattern_dataset))
all_pattern_dataset
OUTPUT:
<class 'list'>
[array([0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]),
 array([0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1]),
.
.
.
array([0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0]),
 ...]

Это дает мне ошибку: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() Может кто-нибудь объяснить, что такое Я делаю что-то не так, и как это исправить?

Кроме того, поскольку типом new_pattern_dataset и all_pattern_dataset является «список», почему они имеют разные форматы?

1 Ответ

0 голосов
/ 12 июля 2020

Сравнение списка с другим списком может быть сложной задачей, поскольку python не знает, хотите ли вы сравнить каждый элемент в списке / подсписке с элементом другого списка или с самими списками.

Следовательно вы получите ошибку: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() Вы можете исправить это, обработав подсписок как строки:

new_pattern_dataset = [str(x) for x in new_pattern_dataset if str(x) not in [str(list(y)) for y in all_pattern_dataset]]

Другой способ получить разницу - использовать наборы, потому что, в отличие от списков, наборы позволяют изначально проверять для различий между 2 наборами:

new_pattern_dataset = list(set(str(x) for x in new_pattern_dataset) - set([str(list(y)) for y in all_pattern_dataset]]))
...