将多个元素(基于条件)移动到列表末尾

时间:2016-10-05 17:16:30

标签: python list python-2.7

我有以下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]

foundmain_l的子列表。问题是:现在我有这个列表,我不知道如何选择不包含hlig中的子串的元素。如果我可以这样做,那么我可以将它们添加到列表not_found然后我可以将它们连接起来:not_found + found - 这会给我我想要的东西。

问题:

有没有办法将匹配元素移到列表末尾main_l

2 个答案:

答案 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的解决方案)删除了关于列表理解的方括号