Python 如何提高比较列表元素的效率?

Python 如何提高比较列表元素的效率?,python,list,data-structures,constraints,time-complexity,Python,List,Data Structures,Constraints,Time Complexity,每当我在在线平台上编写代码时,不知何故我必须将列表中的元素相互比较,我都会使用下面的代码,我认为这是最有效的代码。这是我练习的最后一个代码。这是为了找到两个相同元素之间的最大索引 max=0 for i in range(len(mylist)): if max==(len(mylist)-1): break for j in range(i + 1, len(mylist)): if mylist[i] == mylist[j]:

每当我在在线平台上编写代码时,不知何故我必须将列表中的元素相互比较,我都会使用下面的代码,我认为这是最有效的代码。这是我练习的最后一个代码。这是为了找到两个相同元素之间的最大索引

max=0
for i in range(len(mylist)):
    if max==(len(mylist)-1):
        break
    for j in range(i + 1, len(mylist)):
        if mylist[i] == mylist[j]:
            if max>(abs(i-j)):
                max=abs(i-j)

它运行大多数测试用例,但有时显示“超出了时间限制”。我知道这与约束和时间复杂性有关,但我仍然找不到更好的方法。如果有人能帮助我,那就太好了。

在Python中使用基于C的函数更容易。也不要将变量命名为python类型,比如
list

x = [item for i, item in enumerate(l) if item in l[i+1:]]
# do something with list of values

在Python中使用基于C的函数更容易。也不要将变量命名为python类型,比如
list

x = [item for i, item in enumerate(l) if item in l[i+1:]]
# do something with list of values

您可以按相等的元素分组,然后找出组中的差异,并保持最大值:

lst = [1, 3, 5, 3, 7, 8, 9, 1]

groups = {}
for i, v in enumerate(lst):
    groups.setdefault(v, []).append(i)

result = max(max(group) - min(group) for group in groups.values())

print(result)
输出

7

这种方法的复杂性是
O(n)

您可以按相等的元素分组,然后找出组中的差异,并保持最大值:

lst = [1, 3, 5, 3, 7, 8, 9, 1]

groups = {}
for i, v in enumerate(lst):
    groups.setdefault(v, []).append(i)

result = max(max(group) - min(group) for group in groups.values())

print(result)
输出

7
这种方法的复杂性是
O(n)

时间复杂度:O(n)


时间复杂度:O(n)

如果我们知道
#do some
,我想我们可以省略内部循环。例如,如果它是一个列表上的元素操作,我们可以删除第二个循环。我认为这取决于第二个循环的主体。请提供更多信息。您能分享问题文本(或URL)吗?做点什么很重要。作为提示,您可以使用
collections.Counter
。当您知道在所有情况下
i>j
时,使用
abs(i-j)
似乎很奇怪。为什么不干脆
j-i
,取消对
abs
的调用呢?我想如果我们知道
#做点什么
,我们可以省略内部循环。例如,如果它是一个列表上的元素操作,我们可以删除第二个循环。我认为这取决于第二个循环的主体。请提供更多信息。您能分享问题文本(或URL)吗?做点什么很重要。作为提示,您可以使用
collections.Counter
。当您知道在所有情况下
i>j
时,使用
abs(i-j)
似乎很奇怪。为什么不干脆
j-i
,取消对
abs
的调用?