在列表中一次使用多个功能

时间:2012-08-29 04:36:24

标签: python

基本上,我有一个列表,我想立即执行多个功能。例如,

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,但我知道我以前做过这样的事情。这是一件简单的事我想念还是什么?

顺便说一下,它必须在一条线上。

6 个答案:

答案 0 :(得分:7)

大多数使用原位变异容器的Python方法return None

但是,您的示例可以在一行中轻松处理

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]

答案 1 :(得分:4)

您无法将上述操作链接起来,因为它们是就地执行的。 作为替代方案,请使用sorted()reversed()

答案 2 :(得分: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]

答案 3 :(得分:1)

这些函数中的每一个都就地放在列表中,返回None而不是修改后的列表。你必须做类似

的事情
l = [1,2,3,4,5]
l = reversed(sorted(l + [1,2,3,4,5]))

答案 4 :(得分: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()

答案 5 :(得分:0)

函数extendsortreverse不会返回列表,但会更改调用它们的列表。 Chaining依赖于以前的函数返回一些值并对其进行处理的事实。

E.g。 s="abc"然后您可以s.upper().lower() .upper()返回一个大写的新字符串(对.lower()也是如此)。