在 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))).
所以我有以下 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))).