2015-05-26 4 views
3

Я не уверен, как возвращение работает в следующей функции сравнения? Почему он может вернуть такой формат?вернуть два списка python?

def func(self, num): 
     num = sorted([str(x) for x in num], cmp=self.compare) 

def compare(self, a, b): 
     return [1, -1][a + b > b + a] 
+0

Посмотрите на это следующим образом: -1, если а + Ь> Ь + а еще один (как покрываются ответами - индексирование массива с использованием эквивалентности 1/True и 0/False). – greg

ответ

6

Это не возвращает два списка. Он возвращает одно из двух значений из первого списка. Рассмотрим переписывание:

def compare(self, a, b): 
     possible_results = [1, -1] 
     return possible_results[a + b > b + a] 

Это, воспользовавшись тем, что True в Python рассматривается как значение 1 и False рассматривается как значение 0, и используя их в качестве индексов списка.

3

Булево значение Ложный равна нулю, а логическое значение Истинного является один. Они оба могут быть использованы в качестве индексов в списке:

# Normal indexing with integers 
>>> ['guido', 'barry'][0] 
'guido' 
>>> ['guido', 'barry'][1] 
'barry' 

# Indexing with booleans 
>>> ['guido', 'barry'][False] 
'guido' 
>>> ['guido', 'barry'][True] 
'barry' 

# Indexing with the boolean result of a test 
>>> ['guido', 'barry'][5 > 10] 
'guido' 
>>> ['guido', 'barry'][5 < 10] 
'barry' 

Надежда, что делает все ясно :-)

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