基本上,我有一个列表,我想一次对其执行多个功能。例如,
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,但我知道我以前做过类似的事情。我错过了什么简单的东西还是什么?
顺便说一句,它必须都在一条线上。
基本上,我有一个列表,我想一次对其执行多个功能。例如,
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,但我知道我以前做过类似的事情。我错过了什么简单的东西还是什么?
顺便说一句,它必须都在一条线上。
大多数就地改变容器的 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]
您不能链接上述操作,因为它们是就地执行的。作为替代方案,使用sorted()
和reversed()
。
怎么样:
>>> 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]
这些函数中的每一个都在原地作用于列表,返回None
而不是修改后的列表。你必须做类似的事情
l = [1,2,3,4,5]
l = reversed(sorted(l + [1,2,3,4,5]))
不完美但有趣..
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()
函数extend
,sort
并reverse
不会返回列表,而是更改调用它们的列表。链接依赖于一个事实,即先前的函数返回一些值并对其进行处理。
例如,s="abc"
您可以返回一个大写的新字符串(与 相同)。s.upper().lower()
.upper()
.lower()