在 b 和 return 列表 c 中查找列表 a 的匹配项

find matches of list a in b and return list c

所以我有以下 3 个列表,需要创建第 4 个:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
b = ['21', '18', '17', '16', '15', '14', '12', '11', '10', '7', '6', '3', '2']
c = ['1',  '1',  '1',  '1',  '0',  '0',  '1',  '1',  '1',  '1', '0', '0', '1']

a 总是一样的。 b 和 c 始终具有相等的长度,但长度可以变化。 b 的值始终在 1 到 25 之间。 c 的值始终为 0 或 1。

我需要创建:

d =[0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0]

对于 a 中的每个项目,我在 b 中搜索,return 在 c 中搜索值。

我有大约 3000 组不同的 b 和 c,所以试图创建一些高效的东西,但一直没能找到一个好的方法来做到这一点。

这可能是您要找的:

def get_value(A,D,x):
    if x in D: return D[x]
    return '0'

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
b = ['21', '18', '17', '16', '15', '14', '12', '11', '10', '7', '6', '3', '2']
c = ['1',  '1',  '1',  '1',  '0',  '0',  '1',  '1',  '1',  '1', '0', '0', '1']

map_b_to_c = dict(list(zip(b,c)))

d = [get_value(a, map_b_to_c, str(x)) for x in a]
print(d)

您实际上只需两行即可完成此操作,方法是创建一个将 b 的值映射到 c 的值的字典。然后你通过 a 并在每个字母处检查它是否存在于查找字典中:

lookup = {b_val: c_val for b_val, c_val in zip(b, c)}
d = [lookup[str(a_val)] if str(a_val) in lookup else "0" for a_val in a]

这应该有 O(n) 时间复杂度,其中 n 是 max((len(a), len(b))).