【问题标题】:How to print what I think is an object?如何打印我认为是对象的东西?
【发布时间】:2025-12-10 21:55:01
【问题描述】:
test = ["a","b","c","d","e"]

def xuniqueCombinations(items, n):
    if n==0: yield []
    else:
        for i in xrange(len(items)-n+1):
            for cc in xuniqueCombinations(items[i+1:],n-1):
                yield [items[i]]+cc

x = xuniqueCombinations(test, 3)
print x

输出

"generator object xuniqueCombinations at 0x020EBFA8"

我想查看它找到的所有组合。我怎样才能做到这一点?

【问题讨论】:

标签: python generator


【解决方案1】:

leoluk 是对的,您需要对其进行迭代。但这是正确的语法:

combos = xuniqueCombinations(test, 3)
for x in combos:
    print x

或者,您可以先将其转换为列表:

combos = list(xuniqueCombinations(test, 3))
print combos

【讨论】:

    【解决方案2】:

    这是一个生成器对象。通过迭代访问它:

    for x in xuniqueCombinations:
        print x
    

    【讨论】:

    • for x in xuniqueCombinations: TypeError: 'function' object is not iterable
    • @Alex 你需要调用函数:for x in xuniqueCombinations(test, 3)。或者只是做print list(xuniqueCombinations(test, 3))
    【解决方案3】:
    x = list(xuniqueCombinations(test, 3))
    print x
    

    将您的生成器转换为列表,然后打印......

    【讨论】:

    • 不喜欢这个答案,至少没有关于内存影响的警告。
    • 哦,好吧,但是如果有人在生成器对象上执行循环以进行打印而不将其转换为列表,他将无法再次执行循环而不再次调用该函数,因为迭代器将被耗尽....
    【解决方案4】:

    如果您运行的是 python 2.7 或更高版本,查看 pprint 模块可能会很方便:http://docs.python.org/library/pprint.html

    from pprint import pprint
    pprint(x)
    

    【讨论】:

    • pprint(x) 没有什么不同...