2016-07-19 33 views
-2

我有2列出了相应的工作安排是这样的:判断两个列表,并在Python

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 

它过滤数据,但无法达到所需的格式。
请大家提出一些宝贵意见。
谢谢

+2

和你有什么试图格式化你的结果? – Julien

+0

正如我试过使用嵌套循环,我得到它像:[x,xa] [x,xb] [x,xc] [x,xd]等等。我没有清楚的想法,我怎么能创建list list作为'list_a'和'append/extend'中的项目来获得所需的格式。有关建议会非常有帮助。 – diffracteD

+1

阅读教程哥们! – Julien

回答

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', 'XE'],[ 'Y', '雅', 'YB', 'yc','yd'],['z','za','zb','zc','zd','ze','zf']]

+0

感谢您的多功能答案。人们提出了所有具体的答案,我希望得到与我的数据类似的意见。它有帮助。 – diffracteD

+0

没问题。很高兴帮助! – champ8686

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

不是他想要的,但也没关系。 – Ohumeronen

+1

@Ohumeronen,谢谢,更正 –

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),而不是重要的是要注意。

请注意,只需将可选参数key=itemgetter(0)更改为key=lambda s: s[0]即可摆脱模块operator