コメディ一行の答え:
def countOccurencesAtTheEndOfTheList(L):
return (lambda num: None if num <= 2 else min(5, num))(len(L) if all(map(lambda x: x == L[-1], L)) else len(L) - 1 - [idx for idx, x in enumerate(L) if x != L[-1]][-1])
print countOccurencesAtTheEndOfTheList([1,1,2])
print countOccurencesAtTheEndOfTheList([1,2,1,1])
print countOccurencesAtTheEndOfTheList([1,2,1,1,1])
print countOccurencesAtTheEndOfTheList([1,1,2,2,2,2])
print countOccurencesAtTheEndOfTheList([1,2,1,1,1,1,1,1])
出力:
None
None
3
4
5
説明:
[idx for idx, x in enumerate(L) if x != L[-1]]
最後の要素と一致しない L の各要素のインデックスを取得します。
[idx for idx, x in enumerate(L) if x != L[-1]][-1]
最後の要素と一致しない右端の要素のインデックスを取得します。これは、リスト内のすべての要素が同一でない場合にのみ有効です。
len(L) - 1 - [the above line]
リスト内のすべての要素が同一でない場合、最後の要素に一致するリストの末尾にある要素の数を取得します。
all(map(lambda x: x== L[-1], L)
リスト内のすべての要素が同一である場合にのみ True を返します。
len(L) if [the above line] else [the line above the above line]
リスト内のすべての要素が同一であるかどうかに関係なく、最後の要素に一致するリストの末尾にある要素の数を取得します。値が低すぎる場合は
lambda num: None if num <= 2 else min(5, num)
戻り、可能な最大値を 5 にクランプします。None
警告: 娯楽のみを目的としています。このようなコードを書かないでください。