我想使用python列表理解来实现Bubblesort,但显示空白

时间:2019-07-02 17:50:10

标签: python python-3.x list-comprehension

我想使用python列表理解来实现Bubblesort,但是它显示为空白。尝试使用赋值运算符进行交换(l[j]=l[j+1],但由于列表推导不支持赋值,因此会抛出错误

l = [8, 1, 3, 5, 4, 6, 7, 2]
newlist= [ [(l[j],l[j+1]),(l[j+1],l[j])] for i in range(1,len(l)-1) for j in range(0,len(l)-1) if l[j]>l[j+1] ]

预期输出为:1, 2, 3, 4, 5, 6, 7, 8

但是我得到的输出为[]

1 个答案:

答案 0 :(得分:1)

这是由于一个概念性问题而失败的,即一个每个过滤结果必须产生一个要包含在列表中的值。您的列表理解能力无法存储中间结果-注定会失败。仅给定原始列表ij,您必须确定是否发出值以及发出哪个值。气泡排序逻辑不存在该信息。

例如,考虑第一个嵌套迭代。您手边有以下信息:

l = [8,1,3,5,4,6,7,2]
i = 1
j = 0

鉴于此,您必须立即决定 是否将信息放入我们的最终列表中-如果是,则将哪些信息放入其中。您不能将其推迟到第二遍,因为您在理解范围内没有临时存储空间。

看到问题了吗?