1

これに似たネストされたリストがあり、時間の昇順で並べ替えられています。

[[TIME, 'b', 0],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 10],
[TIME, 'b', 0],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 10],
[TIME, 'b', 0],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 1],
[TIME, 'b', 10]]

各リストの3番目の項目は、0、1、または10のいずれかです。0は開始を表し、1は移動を表し、10は終了を表します。これをさらにネストされたリストに分割して、次のような旅のリストを作成するにはどうすればよいですか。

[[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]],
[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]],
[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]]]
4

5 に答える 5

4

おそらく、これを行うためのよりPython的な方法がありますが、これは機能的で簡単であり、簡単に理解できるはずです。biglist初期データを保持します。

newlist = []
sublist = []
for i in biglist:
    sublist.append(i)
    if i[2] == 10:
        newlist.append(sublist)
        sublist = []

与える:

[[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]],
[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]],
[[TIME, 'b', 0],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 1],[TIME, 'b', 10]]]
于 2012-08-26T23:57:06.907 に答える
1
#x is your initial list
k, new_list = 0, []
for i,j in enumerate(x):
    if j[2] == 10:
        new_list.append(x[k:i+1])
        k = i+1
于 2012-08-26T23:59:23.667 に答える
1

他の解決策とは異なり、ここでは、旅がd[2] == 0終わるときではなく、旅が始まるかどうか()をテストします。

output = []
for d in data:
    if d[2] == 0:
        # Starting a new journey: we add a new list
        output.append([d])
    else:
        # Continuing a journey: we extend the last list
        output[-1].extend([d])

もちろん、最初の旅が始まらない場合、これは失敗します(ステートメントIndexErrorから取得します)...else

于 2012-08-27T00:04:26.667 に答える
0

私が質問を正しく理解した場合、最も明白な解決策:

def iter_journeys(lst):
    for e in lst:
        act = e[2]

        if act == 0:
            journey = []

        journey.append(e)

        if act == 10:
            yield journey
于 2012-08-26T23:56:55.237 に答える
0

これを行うためのより効率的な方法があると確信していますが、基本的な解決策は次のとおりです。

def create_journeys(paths):
  journeys = [[]]

  for path in paths:
    journeys[-1].append(path)

    if path[-1] == 10:
      journeys.append([])

  return journeys
于 2012-08-26T23:58:08.137 に答える