【发布时间】:2019-07-02 17:50:10
【问题描述】:
我想使用 python 列表理解来实现冒泡排序,但它显示为空白。尝试使用赋值运算符进行交换(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
但我得到的输出是[]。
【问题讨论】:
-
运行您的确切代码时,输出不是
[]....另外,请注意,您在newlist中得到的是一个包含2 个元素的2 个元组的列表。跨度> -
你为什么要在列表理解中这样做?我无法想象这是最好的方法的世界。
-
在列表推导中使用冒泡排序的唯一合理方法是单独编写冒泡排序函数,然后调用
sorted_list = [el for el in bubblesort(lst)] -
你不能在列表理解中使用赋值。阅读here。列表推导中的
if用于过滤,因此您无法决定使用哪一对:(a,b)或(b,a)。尝试不同的方法。 -
冒泡排序是一种就地算法,而列表推导式创建一个新列表。两者是处理数据的根本不同方法。
标签: python python-3.x list-comprehension