基本上,我有一个列表,我想立即执行多个功能。例如,
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,但我知道我以前做过这样的事情。这是一件简单的事我想念还是什么?
顺便说一下,它必须在一条线上。
答案 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)
函数extend
,sort
和reverse
不会返回列表,但会更改调用它们的列表。 Chaining依赖于以前的函数返回一些值并对其进行处理的事实。
E.g。 s="abc"
然后您可以s.upper().lower()
.upper()
返回一个大写的新字符串(对.lower()
也是如此)。