-2

タプルのリストとリストがあります:tup = [(1、2)、(2、3)、(3、4)、(4、5)、(5、6)、(6、7)] a = [1、2、3、4、5、6、7]

タプルは実際にはリストaのバイグラムであり、同じ順序です。

次のように、これら2つの構造を組み合わせる必要があります。リストを取得する:

[(1,2),3,4,5,6,7]
[1,(2,3),4,5,6,7]
[1,2,(3,4),5,6,7]
[1,2,3,(4,5),6,7]

番号には制約がないため、リストに重複があるか、異なる可能性があります。これは宿題の問題ではありません。これを必要とするアルゴリズムを実装しようとしていますが、何らかの理由で、これを行うための適切な方法を思い付くことができません。

申し訳ありませんが、私の質問は不明確でした。

4

2 に答える 2

3

あなたの質問はあまり明確ではありません。最初はあなたがこれを意味していると思いました

>>> tup = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> for i,j in enumerate(tup):
...  print a[:i]+[j]+a[i+2:]
... 
[(1, 2), 3, 4, 5, 6, 7]
[1, (2, 3), 4, 5, 6, 7]
[1, 2, (3, 4), 5, 6, 7]
[1, 2, 3, (4, 5), 6, 7]
[1, 2, 3, 4, (5, 6), 7]
[1, 2, 3, 4, 5, (6, 7)]

しかし、私は別の解釈を考えました

>>> for i,j in enumerate(tup):
...  print a[:i]+[tuple(a[j[0]-1:j[1]])]+a[i+2:]
... 
[(1, 2), 3, 4, 5, 6, 7]
[1, (2, 3), 4, 5, 6, 7]
[1, 2, (3, 4), 5, 6, 7]
[1, 2, 3, (4, 5), 6, 7]
[1, 2, 3, 4, (5, 6), 7]
[1, 2, 3, 4, 5, (6, 7)]

tup同じ番号を選んだのは本当に残念ですがa、一般的なケースでそれらが異なる場合

于 2012-09-20T05:06:58.163 に答える
0

私があなたが何を求めているのかを理解しているなら、これは他のほとんどのオプションよりも少し一般的で寛容であるはずです:

import bisect
[a[:bisect.bisect_left(a, lo)] + \
        [(lo, hi)] + \
        a[bisect.bisect_right(a, hi):] for (lo, hi) in tup]

出力は

[[(1, 2), 3, 4, 5, 6, 7],
 [1, (2, 3), 4, 5, 6, 7],
 [1, 2, (3, 4), 5, 6, 7],
 [1, 2, 3, (4, 5), 6, 7],
 [1, 2, 3, 4, (5, 6), 7],
 [1, 2, 3, 4, 5, (6, 7)]]
于 2012-09-20T05:19:15.740 に答える