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

2024-04-23 11:39:17 发布

您现在位置:Python中文网/ 问答频道 /正文

每当我在在线平台上编写代码时,不知何故我不得不将列表中的元素相互比较,我就使用下面的代码,据我所知,这是最有效的。这是我练习的最后一个代码。它是为了找出两个相同元素之间的最大索引。你知道吗

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)

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


Tags: 代码in元素列表forlenif时间
3条回答

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

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

    positions = dict()
    longest_distance = 0

    if len(mylist) < 1:
        return longest_distance

    for index in range(0, len(mylist)):
        if mylist[index] in positions:
            positions[mylist[index]].append(index)
        else:
            positions[mylist[index]] = [index]

    for key, value in positions.items():
        if len(value) > 1 and longest_distance < value[len(value)-1] - value[0]:
            longest_distance = value[len(value)-1] - value[0]

    return longest_distance


l1 = [1, 3, 5, 3, 7, 8, 9, 1]
l2 = [9]
l3 = []
l4 = [4, 4, 4, 4, 4]
l5 = [10, 10, 3, 4, 5, 4, 10, 56, 4]
print(get_longest_distance_between_same_elements_in_list(l1))
print(get_longest_distance_between_same_elements_in_list(l2))
print(get_longest_distance_between_same_elements_in_list(l3))
print(get_longest_distance_between_same_elements_in_list(l4))
print(get_longest_distance_between_same_elements_in_list(l5))

输出-

7                                                                                                                                                                                  
0                                                                                                                                                                                  
0                                                                                                                                                                                  
4                                                                                                                                                                                  
6

时间复杂度: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)。你知道吗

相关问题 更多 >