我有 2 个列表...第一个是这样的a = [imgType_a, imgType_b, imgType_c]第二个是这样的b = [img_foo_a, img_foo_b, img_foo_c, img_bar_a, img_bar_b, img_bar_c]我想比较列表并返回一个索引列表,这些索引对应a于a中的最后一个字母与中的最后一个字母匹配的位置b对于我想返回的例子......[0, 1, 2, 0, 1, 2]如果a = [imgType_c, imgType_b, imgType_a]和b = [img_foo_a, img_foo_b, img_foo_c, img_bar_c, img_bar_a, img_bar_b, img_baz_a, img_qux_a]结果是[2, 1, 0, 0, 2, 1, 2, 2]列表的长度b将始终为>=a.
2 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
您可以使用它index来查找b匹配位置的每个元素的索引a(一旦您将它们转换为最后一个字母)。这可以在列表理解中完成:
>>> [[i[-1] for i in a].index(x) for x in [i[-1] for i in b]]
[0, 1, 2, 0, 1, 2]
或者,更高效、更清晰,先转换数组:
>>> a_last = [i[-1] for i in a]
>>> b_last = [i[-1] for i in b]
>>> [a_last.index(x) for x in b_last]
[0, 1, 2, 0, 1, 2]
炎炎设计
TA贡献1808条经验 获得超4个赞
不要使用列表,而是使用字典:
img_type_map = {img_type[-1]: i for i, img_type in enumerate(a)}
output = [img_type_map[img[-1]] for img in b]
添加回答
举报
0/150
提交
取消