Python版本- 3.3.2
我正在编写一个Python程序,该程序设置一个等于数字范围(0-25)的列表,随机调整这些数字,然后使用四个不同的排序函数对这些数字进行排序:冒泡排序、选择排序、python排序和插入排序。在程序的末尾还有一个计时器函数,用于对随机数的范围进行排序所需的时间。
我需要一种方法将范围从(0-25)更改为(0-100),然后(0-1000),最后(0-10000)。每次它循环遍历一系列数字,并输出为每个排序函数排序列表所需的时间。
下面是代码的一个示例:
    import random
    import time
    # Sets myList equal to a range with a range from 0-25
    myList = list(range(0,25))
    # Randomly shuffles the list of numbers between 0-25
    random.shuffle(myList)
    # Bubble Sort
    def bubbleSort(myList):
    ...(insert code)...
    # Selection Sort
    def selectionSort(myList):
    ...(insert code)...
    # Python Sort
    def pythonSort(myList):
    ...(insert code)...
    # Insertion Sort
    def insertionSort(myList):
    ...(insert code)...
    # Timer
    def timer(array, func):
    ...(insert code)...
    print("Time needed for", func.__name__, 'to sort',len(array),'items: ',diff)
    timer(myList, selectionSort)
    timer(myList, bubbleSort)
    timer(myList, pythonSort)
    timer(myList, insertionSort)因此,我的问题是,如何通过所有排序函数将列表设置为(0-25)循环,输出每个排序函数完成的时间,然后将列表更改为等于(0-100),循环遍历所有函数,输出每个函数的时间等等(0-1000)和(0-100000)?
发布于 2013-09-10 23:12:28
你想要这样的东西:
from datetime import datetime
from random import shuffle
def timer(data, sortfn):
    start = datetime.now()
    sortfn(data)
    end = datetime.now()
    return end - start
def tester():
    lengths = (25, 100, 1000, 10000)
    sortfns = (selectionSort, bubbleSort, pythonSort, insertionSort)
    for length in lengths:
        myList = list(range(length))
        shuffle(myList)
        for sortfn in sortfns:
            # Take a deep copy of the shuffled data
            shuffled = myList[:]
            # Sort the shuffled data
            elapsed = timer(shuffled, sortfn)
            print("{0}({1}): {2}".format(sortfn.__name__, length, elapsed))
tester()发布于 2013-09-10 01:16:50
正如wjl所暗示的
for length in [25, 100, 1000, 10000]:
    myList = range(length) # range(25) is equal to range(0,25)
    timer(myList, selectionSort) #assuming that selectionSort doesn't alter myList
    timer(myList, bubbleSort)
    timer(myList, pythonSort)
    timer(myList, insertionSort)发布于 2013-09-10 01:31:58
您可以将参数放在元组列表中,然后展开元组:
>>> ranges=[(0,10),(15,20),(200,210,2)]   # correspond to start, stop, step in range
>>> for r in ranges:
...    for i in range(*r):
...       # do whatever...或者:
>>> ranges=[(0,10),(15,20),(200,210,2)]   # correspond to start, stop, step in range
>>> for r in ranges:
...    your_list=list(range(*r))
...    # do whatever...https://stackoverflow.com/questions/18709280
复制相似问题