首先,here是Python中各種操作的時間複雜性的好備忘單。
鑑於您對我的聲明的最後一次回覆,我假設您想要使用並將給定列表拆分爲三個單獨的列表,而不通過理解創建任何中間列表。完成此操作的一種方法是將數據結構更改爲collections.deque
,因爲list.remove()
需要O(n)
(因爲它需要移位元素)而deque.popleft()
需要O(1)
。
>>> def partition(queue):
... partition1, partition2, partition3 = [], [], []
... while queue:
... ele = queue.popleft()
... if 0 < ele <= 3:
... partition1.append(ele)
... elif 3 < ele <= 6:
... partition2.append(ele)
... else:
... partition3.append(ele)
... return partition1, partition2, partition3
>>> import collections
>>> p1, p2, p3 = partition(collections.deque(range(10)))
>>> print p1
[1, 2, 3]
>>> print p2
[4, 5, 6]
>>> print p3
[0, 7, 8, 9]
分區1 = [ELEM用於elemList ELEM如果ELEM> 0和元素<= 3] 列表理解是比在效率,但它只能包含一個if語句以下一個for語句 –
最絕**不是**這個問題的重複。這隻與groupby的正確用例有一點相似之處;這些組不是連續的,並且分組條件可以更好地表達爲謂詞序列而不是分組鍵。 – user2357112
@PunyTitan所有elemsn限制在0和9之間?或者可以有其他元素? –