Skip to main content
 首页 » 编程设计

python之为每个重复元素创建具有给定索引的 Python 列表

2025年05月04日18youxin

第一个列表:包含对应类别名称的列表索引

第二个列表:包含作为字符串的类别名称

Intervals=[[Indexes_Cat1],[Indexes_Cat2],[Indexes_Cat3], ...] 
 
Category_Names=["cat1","cat2","cat3",...] 

期望的输出:

list=["cat1", "cat1","cat2","cat3","cat3"] 

使用间隔列表放置输出列表中任何元素的索引。

Ex1:

Intervals=[[0,4], [2,3] , [1,5]] 
Category_Names=["a","b","c"] 

例如:输出 1

["a","c","b","b","a","c"] 

编辑:更多运行案例

Ex2:

Intervals=[[0,1], [2,3] , [4,5]] 
Category_Names=["a","b","c"] 

例如:输出 2

["a","a","b","b","c","c"] 

例 3:

Intervals=[[3,4], [1,5] , [0,2]] 
Category_Names=["a","b","c"] 

例如:Output3

["c","b","c","a","a","b"] 

我的解决方案:

创建任何大小为 n 的空数组。

为每个类别运行一个 for 循环。

output=[""]*n 
for i in range(len(Category_Names)): 
    for index in Intervals[I]: 
       output[index]=Categories[i]   

是否有更好的解决方案,或者更 pythonic 的方式?谢谢

请您参考如下方法:

def categorise(Intervals=[[0,4], [2,3] , [1,5]], 
               Category_Names=["a","b","c"]): 
    flattened = sum(Intervals, []) 
    answer = [None] * (max(flattened) + 1) 
    for indices, name in zip(Intervals, Category_Names): 
        for i in indices: 
            answer[i] = name 
    return answer 
 
assert categorise() == ['a', 'c', 'b', 'b', 'a', 'c'] 
assert categorise([[3,4], [1,5] , [0,2]],  
                  ["a","b","c"]) == ['c', 'b', 'c', 'a', 'a', 'b'] 

请注意,在此代码中,如果“间隔”未涵盖从零到最大间隔数的所有整数,您将在答案中得到 None 值。假定输入是兼容的。