首页 > 解决方案 > 将二维数组作为列表返回,但作为生成器对象打印

问题描述

我编写了一个函数,它根据输入的值创建一个矩阵。然而,尽管该函数返回一个列表,但其输出显示为生成器对象。这种情况的原因是什么?如何将函数输出打印为列表?谢谢!

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

编辑:当for循环以很长的方式编写而不是一行时,问题就解决了。但我不明白为什么,因为我认为它们都意味着相同的情况。

在这些行中:

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)

最后它就像我想要的那样出来了。

标签: pythonmultidimensional-array

解决方案


在这些行中:

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

推荐阅读