例如,我有一个包含许多元素的列表
x = [[1, 2, 3], [3, 4, 5],[2, 3, 4], [4, 7, 8], ...]
每个元素已经排序。
如何从y
的元素中获取名为x
的列表并对其进行排序?
答案 0 :(得分:4)
如果我正确理解您的问题,您应该查看heapq.merge
:
>>> import heapq
>>> lists = x = [[1, 2, 3], [3, 4, 5], [2, 3, 4], [4, 7, 8]]
>>> list(heapq.merge(*lists))
[1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 7, 8]
答案 1 :(得分:0)
如果您只想对使用sorted
进行排序,请尝试使用
x = [[1, 2, 3], [3, 4, 5],[2, 3, 4], [4, 7, 8]]
y = sorted(x)
print y
如果您想以排序方式获取所有元素,请尝试使用
x = [[1, 2, 3], [3, 4, 5],[2, 3, 4], [4, 7, 8]]
y = sorted([item for sublist in x for item in sublist])
print y
答案 2 :(得分:0)
你需要一个“合并”操作:从两个列表开始并继续使用较小的元素;当一个列表完成时,复制剩下的最终元素......
def merge(A, B):
result = []
ia = ib = 0
while ia < len(A) and ib < len(B):
if a[ia] < b[ib]:
result.append(A[ia])
ia += 1
else:
result.append(B[ib])
ib += 1
# copy "tail"
while ia < len(A):
result.append(A[ia])
ia += 1
while ib < len(B):
result.append(B[ib])
ib += 1
return result
如果你有一组N
个列表,只需将它们成对合并,你最终会得到一半。重复,直到你只得到一个清单。
答案 3 :(得分:0)
我将给你一些指示。
首先,定义一个函数merge(x, y)
,它获取两个排序列表并返回一个组合排序列表。
然后,在情侣
上运行合并[merge(lst[i], lst[i+1] ) for i in range(0,len(lst),2) ]
只要列表包含两个以上的元素,并且如果元素的数量是奇数,则应该重复此过程,将[]附加到
答案 4 :(得分:0)
方法1:
import heapq
x = [[1, 2, 3], [3, 4, 5],[2, 3, 4], [4, 7, 8]]
y = list(heapq.merge(*x))
方法2:
import itertools
y = sorted(itertools.chain(*x))