针:['', '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]
