0

リストを手動で列挙する方法を見つけようとしていますが、リストを分割する方法がわからないため、行き詰まっていdataます。これは私がこれまでに持っているコードです..

enumerated_list = []
data = [5, 10, 15]

for x in (data):
    print(x)

for i in range(len(data)):
    enumerate_rule = (i, x)
    enumerated_list.append(enumerate_rule)

print(enumerated_list)

これは出力されます..

5
10
15
[(0, 15), (1, 15), (2, 15)]

私が求めているのは[(0, 5), (1, 15), (2, 15)]. これについてどうすればいいですか?

4

4 に答える 4

3

組み込みを使用enumerate()ます:

>>> list(enumerate([5, 15, 15]))
[(0, 5), (1, 15), (2, 15)]

元のコードの欠点は、ループで使用xしているという事実にありますxが、そのループでは変更されず、値を出力した前のループからそのまま残されています。

ただし、この方法は悪い方法です。これを修正するには、インデックスによるループが必要になります。これは、Python が実行するようには設計されていません。速度が遅く、読みにくいためです。代わりに、値でループします。enumerate()ビルトインは、かなり一般的なタスクであるため、このジョブを実行するためにあります。

あなたが本当に使いたくない場合enumerate()(これは本当に意味がありませんが、何か他のことを一気に教えようとする恣意的な制限としてかもしれません)、さらに良い方法があります:

>>> from itertools import count
>>> list(zip(count(), [5, 15, 15]))
[(0, 5), (1, 15), (2, 15)]

ここでは を使用しますzip()。これは、一度に 2 つのデータ セットをループするために使用される python 関数です。これは、各 iterable から最初の値のタプルを返し、次にそれぞれの 2 番目の値などを返します。これを と組み合わせるとitertools.count()、必要な結果が得られます。

リストを手動で作成する必要性を本当に感じている場合は、Pythonic ではなく何かを行うより Pythonic な方法は次のようになります。

enumerated_list = []
count = 0
for item in data:
    enumerated_list.append((count, item))
    count += 1

ただし、一般的に、リスト内包表記を使用してこのようなリストを作成することに注意してください。この場合、それを行うとすぐに、以前の方法のいずれかを使用する方が理にかなっています。この種のリストの生成は非効率的で読みにくいものです。

于 2013-04-21T12:52:55.967 に答える
1

通常の「for ループ」を使用しますが、enumerated() を使用するため、ループ内でインデックス i を使用できます。

enumerated_list=[]
data = [5, 10, 15]

for i,f in enumerate(data):
    enumerated_list.append((i,f))
print enumerated_list

結果:

[(0, 5), (1, 15), (2, 15)]
于 2013-04-21T13:31:29.900 に答える