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

我有 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.


慕仙森
浏览 182回答 2
2回答

神不在的星期二

您可以使用它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]

炎炎设计

不要使用列表,而是使用字典:img_type_map = {img_type[-1]: i for i, img_type in enumerate(a)}output = [img_type_map[img[-1]] for img in b]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python