ネストされたリストには、各ネストされたリストに2つの要素が含まれています。2番目の要素は条件です。
lst = [[2, 1], [5, 1], [10, 1], [9, 1], [10, 2], [18, 2]]
サブリストの最初のインデックスが、リスト内のすべての1(2番目のサブリスト要素)の後続のリストの最初のインデックスよりも小さい場合、カウンター値は1ずつ増加する必要があります。同様に、リスト内のすべての2について。たとえば、カウンターは1に設定されます。リスト内のすべての1について、2 <5、5 <10-カウンターは1のままです。ただし、次の比較では10 <9は偽であるため、カウンターは1ずつ増加します。次に、プログラムは2を出力する必要があります。リスト内のすべての2について、10 <18であるため、カウンター変数は1を出力します。したがって、プログラムは出力として21を出力します。
私はこれを実装する方法について少し立ち往生しています。それで、私はそれについて段階的に考え始めました。最初の各インデックスを比較するforループがあるのは理にかなっています。だから私がしたことは、最初のサブリスト要素をそれぞれ新しいリストに追加することでした。
count = 1
newlst = []
for item in lst:
newlst.append(item[0])
リストは次のようになります。
[2, 5, 10, 9, 10, 18]
しかし、これらすべての値を比較しても、つまり、インデックス<インデックス+1かどうかを確認すると、2 1が出力されない可能性があります。おそらく、1が出力されるだけです。これに基づいて、どのように比較できますか。すべての1と2の2番目のサブリスト要素?プログラムが21を出力できるようにこれを行う別の方法はありますか?
注意:リストの入力は必ずしもこのリストである必要はありません。各サブリストに2つの要素、つまり[[4、1]、[8、1]、[1、2]、[6、 2]、[15、3]、[9、3]]-これの出力は1 12になります。
質問を明確にした後、私はほとんどそれを釘付けにした@Robᵩを参照する必要があります。
from itertools import groupby
lst = lst=[[4, 1], [8, 1], [1, 2], [6, 2], [15, 3], [9, 3]]
for __,grp in groupby(lst, key=lambda x:x[1]):
grp = list(grp)
print (sum((i<j) for i,j in zip(grp[1:],grp))+1)
変更する必要があるのは、zip()内の2つのリストの順序と+1
、カウンターが1から始まる必要があるための追加だけです。
これで、目的の出力が出力されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加