【问题标题】:Appending Comprehensive Function Iterations python 3.6附加综合功能迭代python 3.6
【发布时间】:2018-04-14 21:10:40
【问题描述】:

我正在尝试完成 selectionSort,并让它返回一个由初始列表加上该列表的综合迭代组成的新列表。

def selectionSort(A):
    log = []
    #log.append(A)
    for i in range(0, len(A) - 1): 
        minIndex = i
        for j in range(i+1, len(A)):
            if A[j] < A[minIndex]:
                minIndex = j
        if minIndex != i:
            A[i], A[minIndex] = A[minIndex], A[i]
    return log


num_list = [10, 9, 8, 7]

打印(selectionSort(num_list))

[7、8、9、10]

我正在寻找类似的东西:

[10, 9, 8, 7, 7, 9, 8, 10, 7, 8, 9, 10]

注意初始列表的三个迭代。

我让它与 BubbleSort 甚至 MergeSort 一起使用,但它们非常不同 - 这种交易指数的方法似乎不允许您在函数发生变化时对其进行存储。似乎列表在内存中发生了变化; log.append(A) 返回已解决的列表 :( 感谢您的帮助。

哦,是的,我在 Anaconda 中使用 python 3.6

【问题讨论】:

  • 这种排序正在改变它正在处理的数组。我认为您的第一步是修改排序以在新数组上工作而不是改变它的参数
  • 要获取日志的“当前状态”,您需要复制当前列表。你在外循环内的第一行应该是log.append(A[:])
  • 附注,请不要使用range(len(A)),如果需要索引,请使用for i, elem in enumerate(A)

标签: python list function sorting


【解决方案1】:

让它像这样工作。感谢您的建议!

def selectionSort(A):
    for i, elem in enumerate(A):
        minIndex = i
        log.append(A[:])
        for j in range(i+1, len(A)):
            if A[j] < A[minIndex]: 
                minIndex = j
        if minIndex != i:
            A[i], A[minIndex] = A[minIndex], A[i]
    while log[-1] == log[-2]:
        log.remove(log[-1])
    return log

num_list = [10, 9, 8, 7]
log = []
print(selectionSort(num_list))

[[10, 9, 8, 7], [7, 9, 8, 10], [7, 8, 9, 10]]

【讨论】:

  • 别忘了在开头初始化log。您还可以在返回 log 之前执行 log = [i for elem in log for i in elem] 以使您的函数结果看起来与 OP 的期望结果完全一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多