Skip to main content
 首页 » 编程设计

python之为什么列表理解对枚举索引进行排序

2025年05月04日13kerrycode

我遇到了一些有趣的事情,使用列表推导式在两个列表中查找匹配的字符串:

decoded_chans1 =  ['A', 'B', 'C', 'D', 'H'] 
user_chans1 =     ['H', 'B', 'C'] 
adj_index_list = [index for index, decoded_ch in enumerate(decoded_chans1)  
                  for user_ch in user_chans1  
                  if user_ch == decoded_ch] 
#output 
In[23]: adj_index_list 
Out[23]: [1, 2, 4] 

我正在寻找的是 adj_index_list 在匹配时立即填充:将 'H' index in decoded_chans1 插入adj_index_list 在 user_chans1 中 'H' 的相同索引位置。这是在避免列表理解并正确编写 for 循环时完成的:

adj_index_list = [] 
for user_ch in user_chans1: 
    for i, decoded_ch in enumerate(decoded_chans1): 
        if user_ch == decoded_ch: 
            adj_index_list.append(i) 
#output 
In[25]: adj_index_list 
Out[25]: [4, 1, 2] 

有人能告诉我我构建的列表推导式是否遗漏了一些微妙的东西,或者列表推导式是否天生就在进行某种幕后排序?

谢谢!

请您参考如下方法:

在你的理解中切换你的 for 循环的顺序:

decoded_chans1 =  ['A', 'B', 'C', 'D', 'H'] 
user_chans1 =     ['H', 'B', 'C'] 
adj_index_list = [index for user_ch in user_chans1  
                  for index, decoded_ch in enumerate(decoded_chans1)  
                  if user_ch == decoded_ch] 

在列表理解中,第一个出现的 for 循环是您的“外部”循环。