对两个列表进行分类并相应地安排在python中

时间:2016-07-19 11:59:41

标签: python

我正在处理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

它会过滤数据,但无法达到所需的格式 你们能否对此发表一些有价值的评论 谢谢

4 个答案:

答案 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]