如何在不显示frozenset的情况下显示集合集

2024-04-29 09:46:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用frozenset创建一组集合,但我想知道是否可以显示

{{1,2}}

而不是

{frozenset({1,2})}

输入

t = [[], [1, 2], [5], [1, 2, 5], [1, 2, 3, 4], [1, 2, 3, 6]]
t1 = set(frozenset(i) for i in t)
print(t1)

输出

{frozenset({1, 2}), frozenset({1, 2, 5}), frozenset({1, 2, 3, 4}), frozenset(), frozenset({1, 2, 3, 6}), frozenset({5})}

Tags: infort1printsetfrozenset
2条回答

如果您所需要的只是更少的详细输出,我将使用快速列表理解

print([set(s) for s in t])

# Output: [{1, 2}, {1, 2, 5}, {1, 2, 3, 4}, set(), {1, 2, 3, 6}, {5}]

您可以定义从frozenset继承的类,如:

class myFrozen(frozenset):
    def __repr__(self):
        return set(self).__repr__()

    def __str__(self):
        return set(self).__str__()

t = [[], [1, 2], [5], [1, 2, 5], [1, 2, 3, 4], [1, 2, 3, 6]]
t1 = set(myFrozen(i) for i in t)
print(t1)

输出:

{{1, 2}, {1, 2, 5}, {1, 2, 3, 4}, set(), {1, 2, 3, 6}, {5}}

请注意,在本例中,对于__repr__()__str__()函数,我只使用了set类中的默认函数。如果不希望显示空集合的set(),可以在打印时更改函数。例如:

class myFrozen(frozenset):
    def __repr__(self):
        return '{' + ",".join(str(x) for x in self) + '}'

    def __str__(self):
        return self.__repr__()

t = [[], [1, 2], [5], [1, 2, 5], [1, 2, 3, 4], [1, 2, 3, 6]]
t1 = set(myFrozen(i) for i in t)
print(t1)
# {{1,2}, {1,2,5}, {1,2,3,4}, {}, {1,2,3,6}, {5}}

相关问题 更多 >