2016-01-21 1 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

ОК, возможно, вы правы @PeterWood. Я снова открою извините ... Я, возможно, не совсем читал вопрос. .. –

ответ

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.

Как отметил Ноктис, в 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 

И вы можете обрезать, что вниз, просто возвращая список понимание вместо того, чтобы назначить его Название переменной:

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