2016-01-21 53 views
4

我正在爲學校做一個小型項目,我必須將quicksort與python的內置排序函數進行比較。我實際上已經陷入了開始,我必須用數字填充多個列表。使用一個函數生成多個列表

def genlist(): 
    x = [] 
    while len(x) < 100 
     y = randint(1,9999) 
     x += [y] 
    return x 

這是我的代碼。此代碼有效,但它只創建一個列表。不過,我的目標是創建多個不同長度的列表。

試過這樣的事情:

def genlist(): 
    x,y,z = [] 
    while len(x,y,z) < 100, 1000, 10 
     y = randint(1,9999) 
     x += [y] 
    return x 

但沒有明顯的工作d:

+0

@Jo ranBeasley我認爲你是通過關閉這個來濫用你的權力,因爲你故意誤解了這個問題並刪除了你的答案。這個問題與產生多個結果有關;給出一些工作代碼,你怎麼做多次? –

+0

我甚至不知道在其他線程的代碼,我只想我自己的代碼工作:^( – epYa

+1

OK也許你是正確的@PeterWood我將重新開放對不起......我也許沒有閱讀問題thuroughly足夠。 .. –

回答

2

我認爲這是你想要的,而不是,可以產生各種長度的隨機列表的功能:

import random 


def main(): 
    print(generate_list(100)) 
    print(generate_list(1000)) 
    print(generate_list(10)) 


def generate_list(length): 
    return [random.randrange(10000) for _ in range(length)] 

if __name__ == '__main__': 
    main() 

請致電generate_list用你想要創建的列表長度並使用返回的結果。

1

你接近 - 你可以只是一對夫婦的變化,以現有的代碼來獲得你可能想要的東西:

def genlist(): 
    x = [] 
    limit = randint(50, 200) 
    while len(x) < limit: 
     y = randint(1,9999) 
     x.append(y) # Use the .append() function is more common 
    return x 

這會給你有之間的隨機長度的隨機號碼列表50和200.正如Noctis指出的那樣,Python中有一些功能可以減少必須編寫的代碼量。當你變得更加熟悉時,閱讀起來也更容易。

我們可以做的第一件事是將while循環變爲for循環。只要你事先知道你想要的東西有多少,for循環就是要走的路。

def genlist(): 
    x = [] 
    for _ in range(randint(50, 200)): # use xrange if you're on Python2 
     y = randint(1,9999) 
     x.append(y) # Use the .append() function is more common 
    return x 

我們可以下一個變化是一種叫做list comprehension。這基本上只需要構成循環的所有代碼並將其阻塞在[]之內。 Here is a great visual guide to list comps

def genlist(): 
    x = [randint(1, 9999) for _ in range(randint(50, 200))] 
    return x 

而且你可以修剪下來的只是返回列表理解,而不是將其分配給varaible:

def genlist(): 
    return [randint(1, 9999) for _ in range(randint(50, 200))] 

而且如果你願意的話,你可以參數化的功能,使主叫方可以自定義輸出 - 使事情甚至更好,你可以給他們默認參數,使他們在默認情況下得到的當前行爲,除非他們需要對其進行重寫:

def genlist(randmin=1, randmax=9999, minsize=50, maxsize=200): 
    return [randint(randmin, randmax) for _ in range(randint(minsize, maxsize)]