Понимание списка Python — генерация нескольких данных

#python #list #list-comprehension

#python #Список #понимание списка

Вопрос:

 import random

M = 4
N = 3


def generisanjevol1(nekalista, m):
    return random.choices(nekalista, k=m)


def generisanjevol2(nekalista, m,n):
    #obj = [[random.choice(nekalista,k=m)] for i in range(N)]]
    obj = [[random.choice(nekalista)] for i in range(n)]
    return obj

    #def poredjenje()


listaslova = ['A', 'B', 'C', 'D', 'E']

lista = generisanjevol1(listaslova, M)
lista2 = generisanjevol2(listaslova, M, N)
print(lista)
print(lista2)
  

Итак, выше приведена моя попытка (generisanjevol2(nekalista, m, n) …

Что я пытаюсь сделать, так это следующее: я хочу сгенерировать N массивов и заполнить их строками, которые генерируются функцией random.choice, и они все равно должны быть строками из listaslova)
Возможно, скажем, N = 3 (N представляет количество массивов) и M = 4 (M представляет длинумассива) Я должен получить что-то вроде этого (не обязательно должны быть одинаковые данные в массивах, потому что, конечно, они генерируются случайным образом):

 [A,C,D,E]
([A,C,E,D] [E,C,B,A] [E,D,D,A])
  

Но результаты, которые я получаю, следующие:

 [A,D,E,C]
[[B],[D],[E]]
  

P.S Если я попробую тот, который прокомментирован, я получу сообщение об ошибке

Ответ №1:

Ошибка в вашей прокомментированной строке связана с тем, что у вас есть дополнительный ] . И random.choice должно быть random.choices .

Но вы также не должны помещать другой список вокруг вызова random.choice() . Он уже возвращает список.

 def generisanjevol2(nekalista, m,n):
    obj = [random.choices(nekalista,k=m) for i in range(n)]
    return obj
  

Комментарии:

1. В прокомментированной строке я получаю ошибку с random.choice(некалиста, k = m)… В нем говорится следующее: TypeError: choice() got an unexpected keyword argument 'k'

2. Это должно быть random.choices , как в generisanjevol1

3. Путем вызова random.choices() generisanjevol2 , как я показал в ответе.

4. Вы видели, что я отредактировал ответ после того, как вы опубликовали свой комментарий?

5. Напишите функцию, которая сравнивает списки и возвращает оценку того, насколько они похожи. Затем вы можете использовать sorted(zip(lista2, lista2), key=lambda pair: yourFunction(*pair)) .

Ответ №2:

Как сказал @Barmar, у вас действительно есть дополнительный [] . Ваша функция должна выглядеть:

 def generisanjevol2(nekalista, m,n):
...:     obj = [random.choices(nekalista, k=m) for i in range(n)]
...:     return obj