我正在处理2个列表,如下所示:
list_a = [x,y,z,.....]
list_b = [xa,xb,xc,xd,xe,ya,yb,yc,yd,za,zb,zc,zd,ze,zf]
我想要实现的是,在安排如下数据时制作更多列表:
list_x = [x,xa,xb,xc,xd,xe]
list_y = [y,ya,yb,yc,yd]
list_z = [z,za,zb,zc,zd,ze,zf]
现在,如果我使用如下的循环:
final_list=[]
for item in list_a:
for value in list_b:
if value[0] == item:
print item, value
它会过滤数据,但无法达到所需的格式 你们能否对此发表一些有价值的评论 谢谢
答案 0 :(得分:3)
list_a = ['x','y','z']
list_b = ['xa','xb','xc','xd','xe','ya','yb','yc','yd','za','zb','zc','zd','ze','zf']
print [[x for x in list_b if x.startswith(y)] for y in list_a]
输出:
[['xa', 'xb', 'xc', 'xd', 'xe'], ['ya', 'yb', 'yc', 'yd'], ['za', 'zb', 'zc', 'zd', 'ze', 'zf']]
或者更确切地说:
print [(y,[x for x in list_b if x.startswith(y)]) for y in list_a]
输出:
[('x', ['xa', 'xb', 'xc', 'xd', 'xe']), ('y', ['ya', 'yb', 'yc', 'yd']), ('z', ['za', 'zb', 'zc', 'zd', 'ze', 'zf'])]
答案 1 :(得分:2)
您可以使用此代码:
list_a = ['x','y','z']
list_b = ['xa','xb','xc','xd','xe','ya','yb','yc','yd','za','zb','zc','zd','ze','zf']
print [(key, [_ for _ in list_b if key == _[0]]) for key in list_a]
它为您提供了一个元组列表,第一个条目是单个字母,第二个条目是列表。
或者你这样做没有这样的元组:
print [[key] + [_ for _ in list_b if key == _[0]] for key in list_a]
答案 2 :(得分:1)
不是100%关于此格式,但您可以使用列表列表。
list_a = ["x","y","z"]
list_b = ["xa","xb","xc","xd","xe","ya","yb","yc","yd","za","zb","zc","zd","ze","zf"]
final_list = []
for item in list_a:
item_list = [item]
for value in list_b:
if value[0] == item:
item_list.append(value)
final_list.append(item_list)
print final_list
它返回 [[' x',' xa',' xb',' xc',' xd',&#39 ; xe'],[' y',' ya',' yb',' yc',' yd&# 39;],[' z',' za',' zb',' zc',' zd', ' ze',' zf']]
答案 3 :(得分:0)
您可以使用itertools.groupby()
和operator.itemgetter()
:
In [46]: from itertools import groupby
In [47]: from operator import itemgetter
In [48]: list_b = ['xa','xb','xc','xd','xe','ya','yb','yc','yd','za','zb','zc','zd','ze','zf']
In [49]: [[prefix] + list(group) for prefix, group in groupby(list_b, key=itemgetter(0))]
Out[49]:
[['x', 'xa', 'xb', 'xc', 'xd', 'xe'],
['y', 'ya', 'yb', 'yc', 'yd'],
['z', 'za', 'zb', 'zc', 'zd', 'ze', 'zf']]
请务必注意,如果未订购list_b
,则传递给groupby()
的参数应为sorted(list_b)
。
作为旁注,您只需将可选参数operator
更改为key=itemgetter(0)
即可删除模块key=lambda s: s[0]
。