2014-11-08 3 views
1

Я хочу создать новый_list, который будет содержать только элементы моего старого_list, которые удовлетворяют условию, что индекс в массиве меток равен 3. Я пытаюсь что-то вроде этого :Создание списка из списка в python на основе условия if

new_list = [x for x in old_list if idx[x] == 3] 
IndexError: arrays used as indices must be of integer (or boolean) type 

Но я получаю следующую ошибку, потому что idx - это массив. Как я могу решить эту проблему?

отредактировано: Idx - это массив равного размера с моими исходными данными, который содержит метки для них. Поэтому в основном я хочу создать новый список, который будет содержать только элементы моего исходного списка, которые, например, имеют метку 3.

Я хочу сделать что-то вроде этого: cluster_a = [old_list [x] для x в idx если x == 3]

Уточнение: мой старый список - это список, содержащий 3D-массивы, а idx - массив равного размера, содержащий метку для каждого трехмерного массива моего списка, как указано выше. Я стараюсь объяснить эту проблему. Если что-то нужно, пожалуйста, скажите мне.

This is the list with the 3d arrays

and this is the array with the labels

+0

Что вы подразумеваете под индексом * в массиве ярлыков 3 *? какой индекс? вы можете показать пример? – Kasramvd

+0

i mean содержащая ценность – gelazari

+0

Можете вы показать нам, что 'old_list' выглядит? – IanAuld

ответ

0

Проблема заключается не в том, что idx список, но, вероятно, что x массив - old_list должен содержать список как элемент. Вы должны ссылаться на индекс, а не сам товар:

[old_list[x] for x in range(len(old_list)) if idx[x] == 3] 

вот минимальный пример:

>>> old_list = [4,5,6] 
>>> idx = [3,2,3] 
>>> [old_list[x] for x in range(len(old_list)) if idx[x] == 3] 
[4, 6] 
+1

Это указывает на (вероятную) проблему, но не дает решения. – chepner

+0

Решение в этом случае - переосмыслить логику. Невозможно сказать, что можно сделать по-разному с открытым кодом. – WeaselFox

+0

Вот почему вам нужно уточнить фактическую проблему, прежде чем давать ответ. – chepner

0

Что об этом? :

new_list = [x for x in old_list if idx.index(x) == 3 ] 
+0

, когда я пытаюсь получить атрибут AttributeError: 'numpy.ndarray' не имеет атрибута 'index' – gelazari

+0

'idx.index (x)' будет возвращать первый индекс в idx, где значение x, но согласно OP, idx - это список меток, поэтому я не думаю, что это правильно. – WeaselFox

+0

@GeorgeLaza вы можете добавить свои списки на свой вопрос, пожалуйста !!! – Kasramvd

Смежные вопросы