首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python -需要帮助循环使用4个不同范围(0-25,0-100,0-1000,0-10000)的函数循环列表。

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

Stack Overflow用户
提问于 2013-09-10 01:04:38
回答 3查看 389关注 0票数 0

Python版本- 3.3.2

我正在编写一个Python程序,该程序设置一个等于数字范围(0-25)的列表,随机调整这些数字,然后使用四个不同的排序函数对这些数字进行排序:冒泡排序、选择排序、python排序和插入排序。在程序的末尾还有一个计时器函数,用于对随机数的范围进行排序所需的时间。

我需要一种方法将范围从(0-25)更改为(0-100),然后(0-1000),最后(0-10000)。每次它循环遍历一系列数字,并输出为每个排序函数排序列表所需的时间。

下面是代码的一个示例:

代码语言:javascript
运行
复制
    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)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-10 23:12:28

你想要这样的东西:

代码语言:javascript
运行
复制
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()
票数 0
EN

Stack Overflow用户

发布于 2013-09-10 01:16:50

正如wjl所暗示的

代码语言:javascript
运行
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2013-09-10 01:31:58

您可以将参数放在元组列表中,然后展开元组:

代码语言:javascript
运行
复制
>>> 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...

或者:

代码语言:javascript
运行
复制
>>> 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...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18709280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档