比较不同大小的列表并返回索引

时间:2018-08-31 23:27:00

标签: python

我有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 个答案:

答案 0 :(得分:1)

您可以使用indexb中找到与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]