针:['', 'yes', 'yes', '', '', '', 'yes', 'yes', 'yes', '']
干草堆:[['', '', 'yes', 'yes', '', '', 'yes', 'yes', '', 'yes'], ['', '', '', 'yes', 'yes', '', '', '', 'yes', 'yes']]
Needle与Haystack [0]在2,6,7匹配并与Haystack [1]在8匹配,我希望能够创建这些索引的匹配列表。
目前:我的代码返回[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 != ''])
答案 0 :(得分:2)
使用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]
答案 1 :(得分:1)
正如TemporalWolf指出的那样,我在列举错误的东西......以下是有效的!
IF EXIST C:\data_TX (
ren "C:\data" "data_CA"
ren "C:\data_TX" "data"
) ELSE (
ren "C:\data" "data_TX"
ren "C:\data_CA" "data"
)
答案 2 :(得分:1)
您在寻找什么 -
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 == sublist[i] and item != ''])
答案 3 :(得分:1)
如果我理解正确,那么您在数组之间寻找逻辑AND,"yes"
为1
且""
为0
。
因此,如果我们首先将您的数据转换为二进制文件:(当然,您可以跳过此段并假设我们首先拥有二进制数据...)
import numpy as np
def convert_to_binary(arr):
return 1 * (np.array(arr) == 'yes')
needle = convert_to_binary(needle)
# array([0, 1, 1, 0, 0, 0, 1, 1, 1, 0])
haystack = np.array([convert_to_binary(h_arr) for h_arr in haystack])
# array([[0, 0, 1, 1, 0, 0, 1, 1, 0, 1],
# [0, 0, 0, 1, 1, 0, 0, 0, 1, 1]])
他们的逻辑AND:
their_logical_and = needle & haystack
# array([[0, 0, 1, 0, 0, 0, 1, 1, 0, 0],
# [0, 0, 0, 0, 0, 0, 0, 0, 1, 0]])
要实现非零指数,可以使用numpy.nonzero
:
indices = [list(np.nonzero(arr)[0]) for arr in their_logical_and]
# [[2, 6, 7], [8]]