Python中list[-1]的含义是什么?

11

我这里有一段代码,它的作用是返回一个元素列表中出现次数最少的元素,并按照出现次数排序:

def getSingle(arr):
    from collections import Counter
    c = Counter(arr)

    return c.most_common()[-1]  # return the least common one -> (key,amounts) tuple

arr1 = [5, 3, 4, 3, 5, 5, 3]

counter = getSingle(arr1)

print (counter[0])

我的问题是关于return c.most_common()[-1]中的-1的意义。将此值更改为其他任何值都会导致代码出错,因为不再返回最不常见的元素。那么,在这种情况下,-1是什么意思?

当我运行这个程序时,我得到了4,这是正确的答案。你具体有什么问题? - Patrick Haugh
9
“[-1]” 表示序列中的最后一个元素,这里是由元素及其出现次数组成的元组列表,按照出现次数从大到小排序,因此最后一个元素是原始集合中出现次数最少的元素。 - khachik
1
可能重复:https://dev59.com/D3RB5IYBdhLWcg3wyqOo - Patrick Haugh
请参阅如何处理“解释这个${code dump}如何工作”的问题在[元]上--或者类似地,如何处理“我不明白这段代码是如何工作的?”类型的问题; 一般来说,这类问题过于宽泛,不适合在这里讨论。相比之下,“在Python中,foo[-1]是什么意思?”则足够具体,适合在这里讨论,但也是一个重复问题。 - Charles Duffy
这回答了您的问题吗?理解切片 - Gino Mempin
1个回答

31
Python 列表的一个不错特性是可以从列表末尾进行索引。可以通过将负数传递给 [] 来实现。它会把 len(array) 视为第0个索引。因此,如果您想要获取 array 中的最后一个元素,只需调用 array[-1]
您所有的 return c.most_common()[-1] 语句所做的就是调用 c.most_common 并返回结果列表中的最后一个值,这将给您该列表中出现频率最低的项目。本质上,这一行等同于:
temp = c.most_common()
return temp[len(temp) - 1]

1
Python 有列表,而不是数组。 - Olivier Melançon
1
是的,抱歉。这些概念相似(尽管实现方式不是数组而是链表),所以我倾向于交替使用这个术语。 - Woody1193
2
Python确实有(动态大小的)数组,并将它们称为“列表”,它们不是链表。 - mkrieger1
1
@mkrieger1 不是这样吗?那是我的误解了。我想他们会将其解释为基于某种算法调整大小的C风格数组,对吧? - Woody1193
1
请查看以下链接以了解正确答案:https://dev59.com/w2865IYBdhLWcg3wOcDy - mkrieger1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接