4

G'day、場所ごとにグループ化された個人のリストがあります。場所に応じて各個人に数値を与える新しい変数を作成したいと思います。私のデータをどのように見せたいかは次のとおりです。

place       individual
here        1
here        2
here        3
there       1
there       2
somewhere   1 
somewhere   2

私はこれを書いた:

    nest="ddd", "ddd", "fff", "fff", "fff", "fff", "qqq", "qqq"

    def individual(x):
        i = 0
        j = 1
        while i < len(x):
            if x[i] == x[i-1]:
                print(j+1)
                i = i + 1
                j = j + 1
            else:
                print(1)
                i = i + 1
                j = 1

    individual(nest)

これにより、必要な値が出力されますが、returnをそこに入れると、ループから抜け出し、最初の値のみが返されます。これらの値を新しい列としてデータに追加できるようにするには、どうすればこれらの値を返すことができるのでしょうか。

歩留まりについて読みましたか?しかし、それが適切かどうかはわかりませんでした。ご協力ありがとうございました!

乾杯、アダム

4

1 に答える 1

5

に置き換えprint(...)ますyield ...。次に、イテラブルを提供するジェネレーターがあります。次に、結果を反復処理することにより、それを他の適切なデータ構造に変換できます。たとえば、ジェネレータからリストを作成するには、次のようにします。

list(individual(nest))  #this is prefered

この場合、反復が暗黙的に行われる場合...

または(このコンテキストでは、より回りくどいですが、おそらくより有益です):

[ x for x in individual(nest) ]  #This is just for demonstration.
于 2012-10-29T19:39:27.697 に答える