基本的に、リストがあり、一度に複数の機能を実行したいと考えています。例えば、
List = [1,2,3,4,5]
List.extend([1,2,3,4,5]).sort().reverse()
結果を にしたいと思います[5,5,4,4,3,3,2,2,1,1]
。
しばらく Python を使っていませんでしたが、以前にこのようなことをしたことがあります。それは私が見逃している単純なものですか、それとも何ですか?
ちなみに、すべて1行である必要があります。
基本的に、リストがあり、一度に複数の機能を実行したいと考えています。例えば、
List = [1,2,3,4,5]
List.extend([1,2,3,4,5]).sort().reverse()
結果を にしたいと思います[5,5,4,4,3,3,2,2,1,1]
。
しばらく Python を使っていませんでしたが、以前にこのようなことをしたことがあります。それは私が見逃している単純なものですか、それとも何ですか?
ちなみに、すべて1行である必要があります。
コンテナをインプレースで変更するほとんどのPythonメソッドはNoneを返します
ただし、例は1行で簡単に処理できます
L = [1,2,3,4,5]
L = sorted(L+[1,2,3,4,5], reverse=True)
チャレンジの精神を保ちながら、オペレーションを連鎖させることは難しくありません(常に戻ってくるためNone
)
>>> L = [1, 2, 3, 4, 5]
>>> L.extend([1,2,3,4,5]) or L.sort() or L.reverse() or L
[5, 5, 4, 4, 3, 3, 2, 2, 1, 1]
これが別の方法です
>>> L = [1, 2, 3, 4, 5]
>>> (L.extend([1,2,3,4,5]), L.sort(), L.reverse()) and L
[5, 5, 4, 4, 3, 3, 2, 2, 1, 1]
そして、あなたはあなたの想像力を暴走させることができます
>>> L = [1, 2, 3, 4, 5]
>>> max(L.extend([1,2,3,4,5]), L.sort(), L.reverse(), L) # Python2.x only
[5, 5, 4, 4, 3, 3, 2, 2, 1, 1]
どうですか:
>>> l = [1,2,3,4,5]*2
>>> l.sort(reverse=True)
>>> l
[5, 5, 4, 4, 3, 3, 2, 2, 1, 1]
またはさらに短い:
>>> sorted([1,2,3,4,5]*2,reverse=True)
[5, 5, 4, 4, 3, 3, 2, 2, 1, 1]
上記の操作はインプレースで実行されるため、連鎖することはできません。代わりに、 と を使用sorted()
しreversed()
ます。
完璧ではありませんが、興味深いです。
class chain():
def __init__(self, my_object):
self.o = my_object
def __getattr__(self, attr):
x = getattr(self.o, attr)
if hasattr(x, '__call__'):
method = x
return lambda *args: self if method(*args) is None else method(*args)
else:
prop = x
return prop
list_ = chain([1, 2, 3, 0])
print list_.extend([9,5]).sort().reverse()
これらの関数はそれぞれNone
、変更されたリストではなく、その場でリストに作用します。あなたは次のようなことをしなければならないでしょう
l = [1,2,3,4,5]
l = reversed(sorted(l + [1,2,3,4,5]))
関数extend
は、リストsort
をreverse
返しませんが、呼び出されるリストを変更します。連鎖は、前の関数が何らかの値を返し、それに作用するという事実に依存しています。
たとえば、大文字で新しい文字列を返すようにs="abc"
行うことができます(と同じです)。s.upper().lower()
.upper()
.lower()