###実現したいこと
Pythonでのリスト操作について質問です
[1,2,3,4,5,1,2,3,4,1,2,1,2,3,4,5,6]
のようなリストを1から始まる要素で分割して
[[1,2,3,4,5][1,2,3,4][1,2][1,2,3,4,5,6]]
という形にしたいのですが、どうすればいいのかわかりません
分割数、要素の最大値はどちらも毎回変動しますが、1,2,3,4,…というように必ず1から始まる数列です
どんな方法でも構いませんので、わかる方教えていただけませんか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
1
のインデックスのリストを取得し、リスト内の隣り合うインデックスで元のリストをスライスすればできます。
python
1def splitAtOnes(l): 2 ones = [i for i, v in enumerate(l) if v == 1] 3 ones.append(None) 4 return [l[ones[i]:ones[i + 1]] for i in range(len(ones) - 1)] 5 6splitAtOnes([1,2,3,4,5,1,2,3,4,1,2,1,2,3,4,5,6]) 7# -> [[1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2], [1, 2, 3, 4, 5]]
投稿2017/11/04 03:43
編集2017/11/04 04:30総合スコア2551
0
一応こんな風に出来ますが、ちょっと美しさに欠ける印象です。
もっといい方法があるような気もします。
Python
1hoge = [1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 1, 2, 3, 4, 5, 6] 2indices = [i for i, x in enumerate(hoge) if x == 1] + [len(hoge)] 3result = [hoge[begin:end] for begin, end in zip(indices, indices[1:])] 4print(result)
ちょっと改造。ほぼ変わりませんが。
Python
1def get_indices(arg, num): 2 for i, v in enumerate(arg): 3 if v == num: 4 yield i 5 6hoge = [1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 1, 2, 3, 4, 5, 6] 7indices = list(get_indices(hoge+[1], 1)) 8result = [hoge[begin:end] for begin, end in zip(indices, indices[1:])] 9print(result)
投稿2017/11/04 03:42
編集2017/11/04 03:53総合スコア35660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
愚直に全要素をループさせて配列を構築するのがよさそうに感じます。
追記:
解決済みとなったようですが、実際のコードを書いておくと下記のようになるでしょうか。
python
1arr_in = [1,2,3,4,5,1,2,3,4,1,2,1,2,3,4,5,6] 2print(arr_in) 3 4arr_out = [] 5arr = [] 6for i in arr_in: 7 if i == 1: 8 arr = [i] 9 arr_out.append(arr) 10 else: 11 arr.append(i) 12 13print(arr_out)
投稿2017/11/04 03:28
編集2017/11/04 04:27退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
Python
1lst = [1,2,3,4,5,1,2,3,4,1,2,1,2,3,4,5,6]+[1] 2num = [i for i,n in enumerate(lst+[1]) if n==1 or lst[i+1]==1] 3num_lst = [num[i:i+2] for i in range(0,len(num),2)] 4ans = [lst[sf[0]:sf[1]+1] for i,sf in enumerate(num_lst) if i!=len(num_lst)-1] 5print(ans) 6 7出力結果 8[[1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2], [1, 2, 3, 4, 5, 6]]
投稿2017/11/04 03:27
編集2017/11/04 04:22総合スコア1392
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/04 03:38
2017/11/04 03:40
2017/11/04 03:48
2017/11/04 04:23
2017/11/04 04:24
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/04 04:26
2017/11/04 04:30