如何匹配ID后将输入列表元素转为元组并追加至目标列表
如何匹配ID并生成元组列表?
我来帮你解决这个问题!你现在有两个列表:一个是包含请求文本和对应ID的my_list,另一个是单独存储ID的ids_list,需要将两个列表中ID匹配的元素转换为元组,最终生成一个由元组组成的新列表。下面给你几种实用的实现方式:
方法一:基础循环遍历法
这种方法逻辑直白,适合刚接触Python的朋友理解:
my_list = [['can you change departure date to 30th March', '207443006734608218498'], ['can you downgrade to economy class?', '276566920664343421717'], ['book flight from San Francisco to Los Angeles on April 17-24', '897058868855606085615']] ids_list = ['207443006734608218498', '276566920664343421717', '897058868855606085615'] target_list = [] # 遍历my_list里的每个子列表 for item in my_list: text, item_id = item # 检查当前子列表的ID是否在ids_list里 if item_id in ids_list: # 转换为元组并追加到目标列表 target_list.append((text, item_id)) print(target_list)
运行后会得到:
[('can you change departure date to 30th March', '207443006734608218498'), ('can you downgrade to economy class?', '276566920664343421717'), ('book flight from San Francisco to Los Angeles on April 17-24', '897058868855606085615')]
方法二:列表推导式(简洁版)
如果你喜欢更Pythonic的写法,用列表推导式一行就能搞定,代码更紧凑:
my_list = [['can you change departure date to 30th March', '207443006734608218498'], ['can you downgrade to economy class?', '276566920664343421717'], ['book flight from San Francisco to Los Angeles on April 17-24', '897058868855606085615']] ids_list = ['207443006734608218498', '276566920664343421717', '897058868855606085615'] # 把ids转成集合,查找效率更高(集合的in操作是O(1),列表是O(n)) ids_set = set(ids_list) target_list = [(text, item_id) for text, item_id in my_list if item_id in ids_set] print(target_list)
这里把ids_list转成集合是个小技巧,当你的ID数量很多时,集合的查找速度会比列表快很多,能提升代码效率。
方法三:字典映射法(高效版)
如果你的my_list数据量非常大,用字典先建立ID和文本的映射,再遍历ids_list去匹配,效率会更高:
my_list = [['can you change departure date to 30th March', '207443006734608218498'], ['can you downgrade to economy class?', '276566920664343421717'], ['book flight from San Francisco to Los Angeles on April 17-24', '897058868855606085615']] ids_list = ['207443006734608218498', '276566920664343421717', '897058868855606085615'] # 先把my_list转成{ID: 文本}的字典 id_text_map = {item_id: text for text, item_id in my_list} # 遍历ids_list,从字典里取出对应文本并生成元组 target_list = [(id_text_map[item_id], item_id) for item_id in ids_list if item_id in id_text_map] print(target_list)
这种方法的优势在于,字典的查找是O(1)时间复杂度,当数据规模大的时候,比遍历列表的效率提升明显。
内容的提问来源于stack exchange,提问作者Jignasha Royala
相关产品推荐
相关产品推荐

