【问题标题】:I want to implement bubblesort using python list comprehension but it displays blank我想使用 python 列表理解来实现冒泡排序,但它显示为空白
【发布时间】: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


【解决方案1】:

这因概念问题而失败,即 每个 过滤结果必须生成一个值以包含在列表中。您的列表理解没有能力存储中间结果——它注定要失败。您必须确定是否发出一个值,以及发出哪个值,只给定原始列表ij。冒泡排序逻辑不存在该信息。

例如,考虑第一个嵌套迭代。您手头有这些信息:

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

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

看到问题了吗?

【讨论】:

    猜你喜欢
    • 2018-04-13
    • 1970-01-01
    • 2017-03-19
    • 2012-07-23
    • 2018-06-23
    • 2012-03-25
    • 2017-03-11
    • 2014-02-20
    相关资源
    最近更新 更多