根据元素的关键字修改列表元素

时间:2014-04-14 10:49:12

标签: python

我有很多列表,我想对某些特定元素进行一些操作。所以,如果我有类似的东西:

list1 = ['list1_itemA', 'list1_itemB', 'list1_itemC', 'list1_itemD']
list2 = ['list2_itemA', 'list2_itemC','list2_itemB']

我感兴趣的是项目'itemC',无论它出现在所有列表中,我需要隔离一个包含itemC的元素,以便对其进行下一次操作。我想要以这样的方式对列表进行排序:itemC占用第一个索引,该索引将通过list [0]方法实现。

但在我的案例中,itemA,itemB,itemC和itemD是生物物种名称,我不知道如何强制列表元素占据第一个索引(这将是一个具有某些字符串的元素,例如我的分析中的'cow'或'itemC ' 这里)。这可能用Python吗?

3 个答案:

答案 0 :(得分:0)

您可以使用“生成器表达式”提取包含"itemC"的项目而无需订购或担心有多少项:

itemCs = []
for lst in (list1, list2):
    itemCs.extend(item for item in lst if "itemC" in item)

这会给itemCs == ['list1_itemC', 'list2_itemC']

答案 1 :(得分:0)

如果您尝试使用文本中包含的特定字符串保存列表,则可以使用:

parse_lists = [ list1, list2, list3 ]
matching_lists = []
search_str = "itemC"
for thisList in parse_list:
    if any( search_str in item for item in thisList ):
        matching_lists.append( thisList )

这样做的好处是,您不需要在所有列表项字符串中对列表名称进行硬编码,我假设您现在正在这样做。

另外值得注意的是,更改matching_lists的元素也会更改原始(引用)列表。为清晰起见,您可以看到thisthis

答案 2 :(得分:0)

>>> [x for y in [list1, list2] for x in y if "itemC" in x]  
['list1_itemC', 'list2_itemC']

>>> [x for y in [list1, list2] for x in y if any(search_term in x for search_term in ["itemC"])]  
['list1_itemC', 'list2_itemC']