0

私は2つのリストa = [2, 6, 12, 13, 1, 4, 5]b = [12, 1]. list の要素は listbのサブセットですa

上記のリストのペアから、次のようにタプルのリストを作成する必要があります。

[(12,6),(12,2),(1,13),(1,12),(1,6),(1,2)] 

b基本的に、 listと listの交点にあるaので、上から、たとえばab最初の交点は index 2、 value にあります12。したがって、 list の最初の要素と listbの 2 番目の要素でタプルを作成しますa。私はPythonでこれを試していますが、このタプルを効率的に作成するための提案はありますか? 各リストには 100 個の要素を含めることができることに注意してください。

4

2 に答える 2

2

これがあなたが望むものだと思います:

In [11]: a=[2,6,12,13,1,4,5]

In [12]: b=[12,1]

In [13]: ans=[]

In [14]: for x in b:
    ind=a.index(x)     #find the index of element in a
    for y in a[:ind]:  #iterate up to that index and append the tuple to a new list 
        ans.append((x,y))
   ....:         

In [15]: ans
Out[15]: [(12, 2), (12, 6), (1, 2), (1, 6), (1, 12), (1, 13)]

使用list comprehension:

In [16]: [(x,y) for x in b for y in a[:a.index(x)]]
Out[16]: [(12, 2), (12, 6), (1, 2), (1, 6), (1, 12), (1, 13)]
于 2013-03-16T11:24:35.767 に答える
2

これはどうですか:

a = [2, 6, 12, 13, 1, 4, 5]
b = [12, 1]

sum([ [ (bb,aa) for aa in a[0:a.index(bb)]] for bb in b], [])

結果は次のとおりです。

[(12, 2), (12, 6), (1, 2), (1, 6), (1, 12), (1, 13)]

リストを元の順序で返しますが、例ではリストを逆に返します。それが問題であれば、簡単に元に戻すことができます。

于 2013-03-16T11:39:43.737 に答える