2015-12-13 4 views
1

Итак, я создаю этот список кортежей, где каждый кортеж состоит из int и массива.Сортировка списка номеров и массива?

a = ((1, array([1,2,3])), (4, array([1,3,3])), (2, array([1,3,2]))) 

Я хочу отсортировать список, чтобы список упорядочивался по возрастанию.

ie.

a = ((1, array([1,2,3])), (2, array([1,3,2])), (4, array([1,3,3]))) 

Я попытался с помощью

a.sort() 

который из статьи, которую я читал, должен отсортировали это, как я хочу, но он возвратил ошибку

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
+0

Прочтите ошибку ... посмотрите, что она говорит. Это довольно ясно. Если это не так, google. Тогда задайте вопрос. –

ответ

1

Явное указать key аргумент функции, так что только первый элемент; чтобы сделать int объект используется как ключ сортировки:

>>> a = [(1, array([1,2,3])), (2, array([1,3,2])), (4, array([1,3,3]))] 
>>> a.sort(key=lambda x: x[0]) 
>>> a 
[(1, array([1, 2, 3])), (2, array([1, 3, 2])), (4, array([1, 3, 3]))] 
+1

Просто примечание: «список» автора на самом деле является кортежем, который не имеет атрибута 'sort'. – timgeb

+0

@timgeb, Заголовок вопроса упоминает 'list'. – falsetru

+0

@falsetru Просто измените свой ответ, чтобы использовать 'sorted' builtin вместо этого, поскольку он работает для любого контейнера или итерируемого типа. – eestrada

1

Вы можете сказать sorted для сортировки по первому элементу с помощью лямбда-выражения:

>>> from numpy import array 
>>> a = ((1, array([1,2,3])), (4, array([1,3,3])), (2, array([1,3,2]))) 
>>> a = tuple(sorted(a, key=lambda x: x[0])) 
>>> a 
((1, array([1, 2, 3])), (2, array([1, 3, 2])), (4, array([1, 3, 3])) 

Обратите внимание, что a является кортеж и, таким образом, неизменны. Вот почему я перебрасываю возвращаемое значение sorted в кортеж и переназначаю a.

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