我遇到了一些有趣的事情,使用列表推导式在两个列表中查找匹配的字符串:
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 循环是您的“外部”循环。
