2017-11-20 20 views
0

私はPython 3.6で作業しました。私は初心者です。だから誰も私にどのように可変サイズのサブリストにリストをスライスすることができるの真の方法を与えることができます。私はこのサイトからthisソリューションを試しましたが、それは私にスライスされたリストの固定サイズを与えました。私はこのリストがあればPythonで可変チャンクサイズのリストをスライス

を::明確にするために

outputList=[[0,1,2], [3,4], [5], [6,7]] 

それは(例えば)ユーザの入力または一部の変数に依存するたび:

inputList= [0,1,2,3,4,5,6,7] 

を私は出力が例えばのようになりたいですサイズ。

+2

どのようにスライスを決定しますか?あなたの例は私たちにあなたを助けてくれるものではありません。 – jacoblaw

+0

例えば自分のプロジェクトでは、単語の出現数に基づいて数字のリストをスライスしたいのですが、テキスト内の出現は単語の後に来ます。私はそのアイデアが必要なので、これは実際問題ではありません。つまり、単語の出現を= nとすると、nが何であっても?リストは上記のように毎回可変サイズのnに基づいてサブリストにスライスする必要があります。私はそれがあなたにどのように説明できるか分かりません。 –

答えて

2

を行うことができます。これには、スライスを要求して通常は範囲外にするとエラーが発生しないという利点があります。できるだけ多くのアイテムを残しておきます。例えば

>>> import itertools as it 
>>> input_list = range(8) 
>>> slices = (3, 2, 1, 2) 
>>> iterable = iter(input_list) 
>>> output_list = [list(it.islice(iterable, sl)) for sl in slices] 
>>> output_list 
[[0, 1, 2], [3, 4], [5], [6, 7]] 

あなたがslices = (3, 2, 1, 3, 2)を持っていた場合、あなたの結果は[[0, 1, 2], [3, 4], [5], [6, 7], []]だろう。

基本的にiter(input_list)は、islice()で次のkの値をフェッチできるように、リストの繰り返し可能性を作成します。

1

あなたは、Pythonの[:#]スライス記法を利用してループ内でこれを行うことができます:

はのは、チャンクサイズをスライスするため、ユーザの入力がリストに保存されているとしましょう。彼らはチャンクを3,2,1,2としたいので、チャンクを定義するユーザー入力は[3,2,1,2]のリストに格納されます。

次に、そのリストをループして、スライスを得るためにそれを使用します。

input_list = [0,1,2,3,4,5,6,7] 
chunk_list = [3,2,1,2] 
output_list = [] 
for i in chunk_list: 
    output_list.append(input_list[:i]) 
    input_list = input_list[i:] 
print(output_list) 

プリント:

[[0, 1, 2], [3, 4], [5], [6, 7]] 
+0

ちなみに、誰かが "pythonの[:#]'スライシング形式 "と言うより良い方法があれば、分かち合いましょう。私はどのように馬鹿に見えますが、私はより良い名前を考えることができません。 –

+1

"スライス表記" –

+0

これは、より良い方法を聞いて、ありがとう! –

0

は、おそらくあなただけのスライスを学びたいです。あなたの例の出力を取得するにはUnderstanding Python's slice notation

を参照してください、あなただけitertools.islice()を使用

outputList = [inputList[:3], inputList[3:5], inputList[5:6], inputList[6:]] 
関連する問題