获取多个列表中最小值的唯一索引

2024-05-29 06:02:06 发布

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

我很难理解这个问题。你知道吗

假设我有n个列表,每个列表包含n个元素。 对于每个列表,我需要找到最小值的索引并将它们存储在新列表中。这很简单。你知道吗

问题是,索引列表中的两个或多个值可能相等。我需要一个具有唯一值的列表。如果两个(或更多)值相等,我想对来自smalles最小值的索引值进行优先级排序。你知道吗

示例:

myLists = []
myLists.append([113.6, 12262.6, 21466.7, 141419.9])      # list 1
myLists.append([122284.8, 111161.8, 106581.1, 141419.9]) # list 2
myLists.append([25427.9, 13694.0, 5148.9, 141419.9])     # list 3
myLists.append([21354.9, 10599.2, 0.1, 141419.9])        # list 4

这将给出索引列表[0,2,2,2]。基于列表2、3和4中的第二个值,我看到最小的值在列表4中,所以我的索引列表应该像[0,?,?,2]. 你知道吗

更进一步,我需要用值1和3来填充问号,但是哪个去哪了?通过检查,我看到由于13694.0(列表3中的索引1)小于111161.8(列表2中的索引1),并且每个列表中的第三个索引值相等,所以我应该选择列表3中的索引1。你知道吗

这意味着我的新索引列表是[0,?,1,2]. 只剩下一个问号,我就用3个填了这个。这就得到了[0,3,1,2]。你知道吗

列表通常很小,所以运行时间在这里并不是一个真正的问题。你知道吗


Tags: 元素示例列表排序时间listappend用值
1条回答
网友
1楼 · 发布于 2024-05-29 06:02:06

我以3个元组的形式合并了所有列表(value,mylist中的list索引,list中的value索引),并按value排序。我的代码的时间复杂度是nlog(n)。你知道吗

myLists = []
myLists.append([113.6, 12262.6, 21466.7, 141419.9])  # list 1
myLists.append([122284.8, 111161.8, 106581.1, 141419.9])  # list 2
myLists.append([25427.9, 13694.0, 5148.9, 141419.9])  # list 3
myLists.append([21354.9, 10599.2, 0.1, 141419.9])  # list 4

merged_list = list()

for index1, ls in enumerate(myLists):
    for index2, x in enumerate(ls):
        merged_list.append((x, index1, index2))

merged_list.sort()

st = set()  #to store already added indices

res = [-1 for i in range(len(myLists))]

for x, y, z in merged_list:
    if res[y] != -1 or z in st:
        continue
    res[y] = z
    st.add(z)

print(res)

输出-

[0, 3, 1, 2]

相关问题 更多 >

    热门问题