比较 2 个数组并写入 python 中的第三个的最有效方法
Most effective way to compare 2 arrays and write to third in python
我的数组是:
array a = [[123, 'a', 'b', 'd'], [253, 'f', 'c'], [322, 's', 'b']]
//每个子数组包含序列号。和字符串。
array b = [['a', 2], ['s', 4], ['b', 1]]
// 每个子数组包含字符串和分数。
要求的结果是:
array result = [[123, 3],[322, 5]]
//每个子数组包含序列号。来自数组 a 和根据其中的字符串的分数总和以及它们来自数组 b 的分数(如果分数为零,则不要写入结果数组)
我知道如何使用数组 a
和 b
的嵌套 for 循环并将其求和并附加到数组 result
,但我想知道是否有更有效的方法,就像使用字典一样。或其他。
谢谢!
尝试:
array_a = [[123, "a", "b", "d"], [253, "f", "c"], [322, "s", "b"]]
array_b = [["a", 2], ["s", 4], ["b", 1]]
tmp = dict(array_b)
out = [
[id_, s]
for id_, *vals in array_a
if (s := sum(tmp.get(v, 0) for v in vals)) != 0
]
print(out)
打印:
[[123, 3], [322, 5]]
您还可以使用字典理解和列表理解:
a = [[123, 'a', 'b', 'd'], [253, 'f', 'c'], [322, 's', 'b']]
b = [['a', 2], ['s', 4], ['b', 1]]
b_dict = {part[0]:part[1] for part in b}
result = [part for part in [[elem[0], sum([b_dict.get(string, 0) for string in elem[1:]])] for elem in a] if part[1]]
result
的值现在是:
[[123, 3], [322, 5]]
我的数组是:
array a = [[123, 'a', 'b', 'd'], [253, 'f', 'c'], [322, 's', 'b']]
//每个子数组包含序列号。和字符串。
array b = [['a', 2], ['s', 4], ['b', 1]]
// 每个子数组包含字符串和分数。
要求的结果是:
array result = [[123, 3],[322, 5]]
//每个子数组包含序列号。来自数组 a 和根据其中的字符串的分数总和以及它们来自数组 b 的分数(如果分数为零,则不要写入结果数组)
我知道如何使用数组 a
和 b
的嵌套 for 循环并将其求和并附加到数组 result
,但我想知道是否有更有效的方法,就像使用字典一样。或其他。
谢谢!
尝试:
array_a = [[123, "a", "b", "d"], [253, "f", "c"], [322, "s", "b"]]
array_b = [["a", 2], ["s", 4], ["b", 1]]
tmp = dict(array_b)
out = [
[id_, s]
for id_, *vals in array_a
if (s := sum(tmp.get(v, 0) for v in vals)) != 0
]
print(out)
打印:
[[123, 3], [322, 5]]
您还可以使用字典理解和列表理解:
a = [[123, 'a', 'b', 'd'], [253, 'f', 'c'], [322, 's', 'b']]
b = [['a', 2], ['s', 4], ['b', 1]]
b_dict = {part[0]:part[1] for part in b}
result = [part for part in [[elem[0], sum([b_dict.get(string, 0) for string in elem[1:]])] for elem in a] if part[1]]
result
的值现在是:
[[123, 3], [322, 5]]