为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕仙森 2021-06-07 08:35:03
我有 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]


查看完整回答
反对 回复 2021-06-08
?
炎炎设计

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]


查看完整回答
反对 回复 2021-06-08
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信