2015-05-26 111 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,如果A + B> B + A否则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

布尔值False为零且布尔值为True为为1。它们都可以作为索引到一个列表:

# 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' 

希望,它使所有清楚:-)