Python 如何使用重复模式提取子列表元素的第一个实例?
我有一份清单:Python 如何使用重复模式提取子列表元素的第一个实例?,python,Python,我有一份清单: l = [['act137L', 'act222J1', 'act45k', 'bac003', 'bac19004', 'cob55C37'], ['act3947', 'act658ll', 'act3FjL', 'bac57D73', 'cob00091', 'cob1A4']] 我想将每个子列表中的'act…'、'bac…'和'cob…'的第一个实例放入另一个列表中,以获得: l2 = [['act137L', 'bac003', 'cob55C37'], [
l = [['act137L', 'act222J1', 'act45k', 'bac003', 'bac19004', 'cob55C37'],
['act3947', 'act658ll', 'act3FjL', 'bac57D73', 'cob00091', 'cob1A4']]
我想将每个子列表中的'act…'
、'bac…'
和'cob…'
的第一个实例放入另一个列表中,以获得:
l2 = [['act137L', 'bac003', 'cob55C37'], ['act3947', 'bac57D73', 'cob00091']]
如何在Python中执行此操作?此函数应该可以工作:
def get_firsts(the_lists, terms):
ret_lists = []
for a_list in the_lists:
new_list = []
rest_terms = terms[:]
while rest_terms:
for val in a_list:
for term in rest_terms[:]:
if val.startswith(term):
new_list.append(val)
rest_terms.remove(term)
ret_lists.append(new_list)
return ret_lists
按如下方式使用:
>>> get_firsts(l, ['act','bac','cob'])
[['act137L', 'bac003', 'cob55C37'], ['act3947', 'bac57D73', 'cob00091']]
您可以使用前三个字母作为键来收集值:
from collections import OrderedDict
l = [['act137L', 'act222J1', 'act45k', 'bac003', 'bac19004', 'cob55C37'],
['act3947', 'act658ll', 'act3FjL', 'bac57D73', 'cob00091', 'cob1A4']]
def first_items(l):
res = []
for sublist in l:
d = OrderedDict()
for x in sublist:
d.setdefault(x[:3], x)
res.append(list(d.values()))
return res
print(first_items(l))
输出:
[['act137L', 'bac003', 'cob55C37'], ['act3947', 'bac57D73', 'cob00091']]
在上述中,如果dict
中不存在键,则设置该值。如果键已存在,则不会更改dict
,因此保留第一个值集
如果您知道具有相同前缀的项目在列表中始终相邻,则可以使用:
您可以使用列表:
l2 = [[j[i] for i in range(len(j)) if j[i][:3] not in ''.join(k for k in j[:i])] for j in l]
如果尚未添加任何元素,则只会将元素添加到新构造的子列表。此解决方案无法按发布的方式工作。它在删除while语句时起作用。非常感谢。
l2 = [[j[i] for i in range(len(j)) if j[i][:3] not in ''.join(k for k in j[:i])] for j in l]