Skip to main content
 首页 » 编程设计

python之在 Python 中查找列表和多个子列表之间的匹配索引

2025年05月04日19xxx_UU

针:['', 'yes', 'yes', '', '', '', 'yes', 'yes', 'yes', '']

干草堆:[['', '', 'yes', 'yes', '', '', 'yes', 'yes', '', 'yes'], ['', '', '', '是', '是', '', '', '', '是', '是']]

Needle 在 2、6、7 处与 Haystack[0] 匹配,在 8 处与 Haystack[1] 匹配,我希望能够创建这些索引匹配列表。

目前:我的代码返回 [1,2,6,7,8],但没有告诉我匹配项在哪里...不确定为什么它在 1 处找到匹配项:

for sublist in (haystack): 
print(needle) 
print(sublist) 
print([i for i, item in enumerate(needle) if item in sublist and item != '']) 

我的输出看起来像

['', 'yes', 'yes', '', '', '', 'yes', 'yes', 'yes', ''] 
['', '', 'yes', 'yes', '', '', 'yes', 'yes', '', 'yes'] 
[1, 2, 6, 7, 8] 
['', 'yes', 'yes', '', '', '', 'yes', 'yes', 'yes', ''] 
['', '', '', 'yes', 'yes', '', '', '', 'yes', 'yes'] 
[1, 2, 6, 7, 8] 

完全可重现:

needle = ['', 'yes', 'yes', '', '', '', 'yes', 'yes', 'yes', ''] 
haystack = [['', '', 'yes', 'yes', '', '', 'yes', 'yes', '', 'yes'], ['', '', '', 'yes', 'yes', '', '', '', 'yes', 'yes']]` 
 
for sublist in (haystack): 
    print(needle) 
    print(sublist) 
    print([i for i, item in enumerate(needle) if item in sublist and item != '']) 

请您参考如下方法:

使用enumerate 和 zip:

for sublist in haystack: 
    print(needle) 
    print(sublist) 
    print([i for i, (x, y) in enumerate(zip(needle, sublist)) if x and y and x == y]) 

输出:

['', 'yes', 'yes', '', '', '', 'yes', 'yes', 'yes', ''] 
['', '', 'yes', 'yes', '', '', 'yes', 'yes', '', 'yes'] 
[2, 6, 7] 
['', 'yes', 'yes', '', '', '', 'yes', 'yes', 'yes', ''] 
['', '', '', 'yes', 'yes', '', '', '', 'yes', 'yes'] 
[8]