我有一个清单:
l = [['act137L', 'act222J1', 'act45k', 'bac003', 'bac19004', 'cob55C37'],
['act3947', 'act658ll', 'act3FjL', 'bac57D73', 'cob00091', 'cob1A4']]
我希望将每个子列表中的'act...'
,'bac...'
和'cob...'
的第一个实例放入另一个列表中以获取:
l2 = [['act137L', 'bac003', 'cob55C37'], ['act3947', 'bac57D73', 'cob00091']]
我怎样才能在Python中执行此操作?
答案 0 :(得分:0)
此功能应该有效:
request.execute(
new ResultListener<List<com.here.android.mpa.search.Location>>() {
@Override
public void onCompleted(List<Location> locations, ErrorCode errorCode) {
}
//...
}
使用它:
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
答案 1 :(得分:0)
您可以使用前三个字母的OrderedDict
作为键来收集值:
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']]
在上面setdefault
设置dict
中不存在密钥的值。如果密钥已存在,则不会更改dict
,因此会保留第一个值集。
如果您知道列表中具有相同前缀的项目始终彼此相邻,则可以使用groupby
:
from itertools import groupby
res = [[next(g) for _, g in groupby(sublist, lambda x: x[:3])] for sublist in l]
答案 2 :(得分:0)
您可以使用列表理解:
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]
如果尚未添加此类元素,则仅将元素添加到新构建的子列表中。