Python - 需要帮助使用4个不同范围(0-25,0-100,0-1000,0-10000)通过函数循环列表

时间:2013-09-10 01:04:38

标签: python function sorting loops

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)?

3 个答案:

答案 0 :(得分:2)

正如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)

答案 1 :(得分:0)

您可以将参数放在元组列表中的范围内,然后只展开元组:

>>> 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...

答案 2 :(得分:0)

你想要这样的东西:

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()