Возврат 2D-массива в виде списка, но печать в качестве объекта генератора - PullRequest
0 голосов
/ 26 марта 2020

Я написал функцию, которая создает матрицу на основе введенных значений. Однако, несмотря на функцию, возвращающую список, ее выходные данные отображаются как объекты-генераторы. В чем причина такой ситуации и как распечатать вывод функции в виде списка? Спасибо!

import random
def gnrtRandomMtrcs(row, column):
    lowercase = list("abcdefghijklmnopqrstuvwxyz")
    uppercase = list("ABCDEFGJKLMNPRSTUVWXYZ")
    numbercase = list("0123456789")
    random.shuffle(lowercase)
    random.shuffle(uppercase)
    random.shuffle(numbercase)
    allcases = []
    allcases.append(item for item in lowercase)
    allcases.append(item for item in uppercase)
    allcases.append(item for item in numbercase)
    random.shuffle(allcases)
    matrices = [[i * j for j in range(column)] for i in range(row)]
    for i in range(row):
        for j in range(column):
            matrices[i][j] = random.choice(allcases)
    return matrices

Пример вывода при параметрах 3 и 2:

[[<generator object gnrtRandomMtrcs.<locals>.<genexpr> at 0x0337E4F8>,
  <generator object gnrtRandomMtrcs.<locals>.<genexpr> at 0x0337E4F8>], 
 [<generator object gnrtRandomMtrcs.<locals>.<genexpr> at 0x0337E4F8>, 
  <generator object gnrtRandomMtrcs.<locals>.<genexpr> at 0x0337E568>], 
 [<generator object gnrtRandomMtrcs.<locals>.<genexpr> at 0x0337E4F8>, 
  <generator object gnrtRandomMtrcs.<locals>.<genexpr> at 0x0337E4F8>]]

Но я хочу, чтобы вывод был таким:

[['L', '0'],['2', '6'],['b', 'K']]  

Отредактировано: Проблема была решена, когда для l oop было написано длинный путь, а не в одной строке. Но я не понимаю, почему, потому что я думаю, что они оба имеют в виду одну и ту же ситуацию.

В этих строках:

allcases.append(item for item in lowercase)
allcases.append(item for item in uppercase)
allcases.append(item for item in numbercase)

Я внес эти исправления:

for item in lowercase:
    allcases.append(item)
for item in uppercase:
    allcases.append(item)
for item in numbercase:
    allcases.append(item)

И, наконец, все вышло так, как я хотел.

1 Ответ

2 голосов
/ 26 марта 2020

В этих строках:

    allcases.append(item for item in lowercase)
    allcases.append(item for item in uppercase)
    allcases.append(item for item in numbercase)

Похоже, вы добавляете выражение генератора. Попробуйте заключить скобки в круглые скобки.

    allcases.append([item for item in lowercase])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...