我有以下2个Python列表:
main_l = ['Temp_Farh', 'Surface', 'Heater_back', 'Front_Press',
'Lateral_Cels', 'Gauge_Finl','Gauge_Relay','Temp_Throw','Front_JL']
hlig = ['Temp', 'Lateral', 'Heater','Front']
如果元素包含main_l
中列出的字符串,我需要将元素从hlig
移到列表末尾。
main_l
的最终版本应如下所示:
main_l = ['Surface', 'Gauge_Finl','Gauge_Relay', 'Temp_Farh', 'Heater_back', 'Front_Press',
'Lateral_Cels', 'Temp_Throw','Front_JL']
我的尝试:
我首先尝试查找列表main_l
是否包含第二个列表hlig
中列出的子字符串的元素。这是我这样做的方式:
`found` = [i for e in hlig for i in main_l if e in i]
found
是main_l
的子列表。问题是:现在我有这个列表,我不知道如何选择不包含hlig
中的子串的元素。如果我可以这样做,那么我可以将它们添加到列表not_found
然后我可以将它们连接起来:not_found + found
- 这会给我我想要的东西。
问题:
有没有办法将匹配元素移到列表末尾main_l
?
答案 0 :(得分:4)
您可以使用每个元素是否包含来自hlig的字符串作为键来排序main_l
:
main_l.sort(key=lambda x: any(term in x for term in hlig))
答案 1 :(得分:1)
我会重写你所拥有的:
main_l = ['Temp_Farh', 'Surface', 'Heater_back', 'Front_Press', 'Lateral_Cels', 'Gauge_Finl','Gauge_Relay','Temp_Throw','Front_JL']
hlig = ['Temp', 'Lateral', 'Heater','Front']
found = [i for i in main_l if any(e in i for e in hlig)]
然后解决方案很明显:
not_found = [i for i in main_l if not any(e in i for e in hlig)]
answer = not_found + found
编辑:根据Sven Marnach的评论(对于aviraldg的解决方案)删除了关于列表理解的方括号