2017-04-23 9 views
2

私は書くのがかなり紛らわしいことを念頭に置いています。私はそれを許して、私はすぐにそれに飛びつくでしょう。リストの2つのリストの間で操作を実行し、最初のリストを追跡する

基本的には、私はの2つのリストの2つのリストを持っていて、それぞれに異なる数の要素があります。コードの私のラインの中で

L1 = [[1.1,1.2],[1.3,1.4]] 
L2 = [[2.1,2.2],[2.3,2.4],[2.5,2.6]] 

、私は「パラメータとして取ら二つのリスト間の最短距離」を見つけるために、定義関数を持っています。例えば、L1で、[1.1,1.2]である最初のリストもL2、[2.1,2.2]抽出される最初のリストを抽出しています。次に、この両方のリストは、値を返す関数を介して行われます。このプロセスは[1.1,1.2]が[2.3,2.4]などと比較され、比較する要素がなくなるまで続きます。とペアになって、私が今直面してる問題はL1からそのリストを追跡することができないされ

outputL = [values,values,values..... and so on as there are many combinations] 

:関数から得られた値は、その後私が好きな何かを得る出力としてリストに追加されますその機能を実行しながらL2内のもの

例:

得L1の最初のリストは[1.1,1.2]であり、L2は[2.1,2.2]である==> ==>リストに付加価値を==>取得する機能を経由。

リストのすべての値の代わりに、リストの値の横にあるL1またはL2のリスト要素を少なくとも表示したいので、どの値がどのリストに属しているかを把握することができます。

expected output would be something like : [values,1.1,1.2, values,1.3,1.4...so on] 

私は、コードを持っている:あなたが探しているもの

outputL = [] 
for i in L1: 
    for j in L2: 
     results = shortest_distance(i,j) #shortest_distance is the defined function that takes two lists as it's parameter 
     outputL.append(results) 
print(outputL) 
+0

あなたは単純に 'enumerate'を探しているようです。 – timgeb

答えて

1

itertools.productです。

この関数は、提供するリスト間のすべての可能な組み合わせのリストを生成します。独自の2のリストの例では

、これは結果のようになります。

list(product(L1, L2)) 
Out[56]: 
[([1.1, 1.2], [2.1, 2.2]), 
([1.1, 1.2], [2.3, 2.4]), 
([1.1, 1.2], [2.5, 2.6]), 
([1.3, 1.4], [2.1, 2.2]), 
([1.3, 1.4], [2.3, 2.4]), 
([1.3, 1.4], [2.5, 2.6])] 

あなたは、その後の組み合わせを反復して、距離関数を実行することができます。下の例では、距離関数を提供していないのでユークリッド距離を使用していますが、もちろんeuclideanを自分のshortest_distanceに置き換えることもできます。

L1 = [[1.1,1.2],[1.3,1.4]] 
L2 = [[2.1,2.2],[2.3,2.4],[2.5,2.6]] 

from scipy.spatial.distance import euclidean 
from itertools import product 

outputL = [ euclidean(a, b) for pair in product(L1, L2) for a, b in pair ] 
関連する問題