-1

こんにちは私は興味深いスニペットを見つけました:

seq = ["one", "two", "three"] #edited
for i, element in enumerate(seq):
    seq[i] = '%d: %s' % (i, seq[i])

>>> seq
['0: one', '1: two', '2: three']

Pythonがそれをどのように行っているのだろうか....私にとって要素は未定義である必要があります...しかし明らかにそうではありません..Pythonはここで何をしますか?

どうもありがとう!

4

4 に答える 4

3

enumerate基本的に、入力リストの各要素を、最初の要素をインデックスとして、要素を2番目の要素として持つタプルのリストに変換します。enumerate(['one', 'two', 'three'])したがって、[(0, 'one'), (1, 'two'), (2, 'three')]

直後のビットは、列挙内の各タプルの最初の要素と2番目の要素にforほぼ割り当てられます。したがって、たとえば最初の反復では、、、および、他のタプルを調べて、他の反復の値を取得します。ielementi == 0element == 'one'

于 2013-01-24T11:09:27.773 に答える
2

列挙関数の実際の定義は次のようになります

enumerate(iterable[, start]) -> iterator for index, value of iterable

Return an enumerate object.  iterable must be another object that supports
iteration.  The enumerate object yields pairs containing a count (from
start, which defaults to zero) and a value yielded by the iterable argument.
enumerate is useful for obtaining an indexed list:
    (0, seq[0]), (1, seq[1]), (2, seq[2]), ...

ただし、パラメータseqが定義されていない場合、目的の出力は返されず、NameError:name'seq'が定義されていないなどのエラーがスローされます。

于 2013-01-24T11:15:46.427 に答える
1

私はあなたが何を望んでいるのか、列挙するのか、これで何が起こっているのかわかりません。これが役立つかもしれません:

seq = ["one", "two", "three"]
for i range(3):
    seq[i] = '%d: %s' % (i, seq[i])

>>> seq
 ['0: one', '1: two', '2: three']

実際、ここで「seq」はlist-classのオブジェクトです。リスト内の各要素は、異なるクラスの独立したオブジェクトを参照しています。上記の関数の場合; まず、「seq [i]」にアクセスして各リスト要素のオブジェクトの参照を取得し、参照されたオブジェクト値(他のクラスに属することができます)を使用して新しいオブジェクトを作成します。次に、「seq[i]」を新しく作成されたものに再度参照します。各要素のオブジェクト。

于 2013-01-24T11:56:35.530 に答える
0

あなたが正しいです。seqは定義されていません。スニペットは機能しません。これは、seqが以前にseq = ['one'、'two'、'three']に設定されている場合にのみ機能します。やってみなよ!

于 2013-01-24T11:09:01.423 に答える