2016-07-19 8 views
-2

pythonでそれに応じてアレンジは次のようになります。私は何を達成しようとしていることは、次のようにデータを配置しながら、複数のリストを作るために、 二つのリストを分類し、私は2つのリストで働いている

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: 
    for value in list_b: 
    if value[0] == item: 
     print item, value 

これは、データをフィルタリングしますが希望の形式に到達することはできません。

list_x = [x,xa,xb,xc,xd,xe] 
list_y = [y,ya,yb,yc,yd] 
list_z = [z,za,zb,zc,zd,ze,zf] 

は今、私のようなループを使用している場合。
ご連絡ありがとうございます。
あなたが

+2

あなたの結果をフォーマットしようとしましたか? – Julien

+0

ネストされたループを使ってみましたので、私はそれを得ています:[x、xa] [x、xb] [x、xc] [x、xd]など。どのように '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'、 'YA'、 'YB' を返し、 'yc'、 'yd']、['z'、 'za'、 'zb'、 'zc'、 'zd'、 'ze'、 'zf']]

+0

多才な答えをありがとう。人々はすべての特定のものを置く、私は自分のデータに類似した意見を求めた。それは助けになった。 – diffracteD

+0

問題ありません。うれしかったよ! – champ8686

2

あなたはこのコードを使用することができ感謝:

それはあなたの最初のエントリは、単一の文字とリストである第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を削除することができます。

関連する問題