0

基本的に、リストがあり、一度に複数の機能を実行したいと考えています。例えば、

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行である必要があります。

4

6 に答える 6

7

コンテナをインプレースで変更するほとんどの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]
于 2012-08-29T04:43:33.993 に答える
4

どうですか:

>>> 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]
于 2012-08-29T04:43:27.937 に答える
4

上記の操作はインプレースで実行されるため、連鎖することはできません。代わりに、 と を使用sorted()reversed()ます。

于 2012-08-29T04:39:30.573 に答える
1

完璧ではありませんが、興味深いです。

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()
于 2012-08-29T07:13:54.800 に答える
1

これらの関数はそれぞれNone、変更されたリストではなく、その場でリストに作用します。あなたは次のようなことをしなければならないでしょう

l = [1,2,3,4,5]
l = reversed(sorted(l + [1,2,3,4,5]))
于 2012-08-29T04:40:43.933 に答える
0

関数extendは、リストsortreverse返しませんが、呼び出されるリストを変更します。連鎖は、前の関数が何らかの値を返し、それに作用するという事実に依存しています。

たとえば、大文字で新しい文字列を返すようにs="abc"行うことができます(と同じです)。s.upper().lower().upper().lower()

于 2012-08-29T04:43:05.550 に答える