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,但我知道我以前做过类似的事情。我错过了什么简单的东西还是什么?

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

4

6 回答 6

7

大多数就地改变容器的 Python 方法都返回 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]
于 2012-08-29T04:43:33.993 回答
4

您不能链接上述操作,因为它们是就地执行的。作为替代方案,使用sorted()reversed()

于 2012-08-29T04:39:30.573 回答
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 回答
1

这些函数中的每一个都在原地作用于列表,返回None而不是修改后的列表。你必须做类似的事情

l = [1,2,3,4,5]
l = reversed(sorted(l + [1,2,3,4,5]))
于 2012-08-29T04:40:43.933 回答
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 回答
0

函数extend,sortreverse不会返回列表,而是更改调用它们的列表。链接依赖于一个事实,即先前的函数返回一些值并对其进行处理。

例如,s="abc"您可以返回一个大写的新字符串(与 相同)。s.upper().lower().upper().lower()

于 2012-08-29T04:43:05.550 回答