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
的调用?