繁体   English   中英

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

[英]Modifying list elements based on key word of the element

我有很多列表,希望对某些特定元素进行一些操作。 所以,如果我有这样的事情:

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

我感兴趣的是项目'itemC'出现在所有列表中的任何地方,我需要隔离一个包含itemC的元素,以便对其进行后续操作。 我考虑过以listC占据第一个索引的方式对列表进行排序,这可以通过list [0]方法实现。

但是在我的情况下,itemA,itemB,itemC和itemD是生物物种名称,我不知道如何强制列表元素占据第一个索引(在我的分析中,该元素将带有特定字符串,例如“ cow”或“ itemC”) 。 Python可以做到吗?

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

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

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

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

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元素也会更改原始(引用)列表。 你可以看到这个这个的清晰度。

>>> [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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM