我需要在以下python程序中解释v:(-v[1],v[0])
v
在此处的含义以及-v[1]
和v[0]
的含义是什么?
def top_chars(word, n):
counts = Counter(word)
list1 = []
list1 = counts.most_common()
list1.sort(key=lambda v: (-v[1], v[0]))
return list1[0:n]
对于word =“aaaaabbbbcccc” 请解释给定单词的函数v
答案 0 :(得分:0)
语句lambda v: (-v[1], v[0])
定义了一个函数。该函数可以分配给名称并用作函数。因此:
>>> f = lambda v: (-v[1], v[0])
>>> f( (1, 2) )
(-2, 1)
v
可以是任何至少包含两个元素的列表或元组。该函数返回一个元组,该元组由第二个元素的负数后跟第一个元素的正数组成。
更多信息:当word =“aaaaabbbbcccc”时,让我们考虑top_chars函数。在这种情况下,list1 = counts.most_common()
的结果是:
[('a', 5), ('c', 4), ('b', 4)]
请注意,list1有三个元素,每个元素都是一个由一个字符和一个数字组成的元组。下一行(具有lambda函数的行)根据上面f
给出的键对此进行排序。让我们看看f
对list1
中每个元组的作用{/ 1}}:
>>> f( ('a', 5) )
(-5, 'a')
>>> f( ('c', 4) )
(-4, 'c')
>>> f( ('b', 4) )
(-4, 'b')
首先,sort
检查密钥的第一个元素,在这种情况下,是数字。这些数字中最小的是-5。所以sort
首先将('a',5)置于排序列表中。下一个最小值是-4。但是,有两个排名为-4。要选择将下两个中的哪一个放入列表中,sort
必须检查密钥的第二个值。在这种情况下,第二个值是'b'和'c'。由于'b'在'c'之前排序,sort
将('b',4)放在下一个列表中,然后('c',4)放在它之后。这解释了为什么最终结果是:
>>> list1.sort(key=lambda v: (-v[1], v[0]))
>>> list1
[('a', 5), ('b', 4), ('c', 4)]
答案 1 :(得分:0)
lambda v: (-v[1], v[0])
是一个lambda expression,基本上是一个紧凑的匿名函数。它相当于:
def func(v):
return (-v[1], v[0])
...除了它没有名称,但你可以为lambda函数指定名称,例如func = lambda v: (-v[1], v[0])
。
现在,sort()
对象的list
方法接受一个可选的关键字参数key=
,它应该是一个接受一个参数的函数(在本例中称为v
})。列表将按照key
传递的函数的返回值进行排序。这意味着list1
由迭代(例如字符串,列表,元组)组成,我们现在v
将根据元组排序,其元素的第一个元素为负{ {1}} {1}}元素,其第二个元素是1
的{{1}}元素。 (例如,如果v
,则0
。)