我有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
。
答案 0 :(得分:1)
您可以使用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]
答案 1 :(得分:0)
使用字典,而不是使用列表:
img_type_map = {img_type[-1]: i for i, img_type in enumerate(a)}
output = [img_type_map[img[-1]] for img in b]