将具有多种类型(int和list)的列表打印为s

2024-03-29 13:51:18 发布

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

我必须打印一个集合(int或list)。你知道吗

例如:

如何将[[1,2],[4,5,6],[9],[]]作为一个集合打印?当我对set()中的列表执行()操作时,它返回错误:unhashable type。你知道吗

我知道我可以使用递归,到目前为止我已经:

def printSet (A):
    if A == int:
      print (A)
    else:

。。但我不知道我还能做什么。请帮帮我!你知道吗

我不需要任何花哨的库或任何东西,只要递归。然而,如果有一个合适的方法,我也会采取。你知道吗


Tags: 方法列表ifdeftype错误elselist
3条回答

如果我理解正确,A是一个列表,它包含类型为list的对象或类型为int的对象

for elem in A:
    if isinstance(elem, int):
         print(elem)
    elif isinstance(elem, list):
         print(set(elem))

如果你有列表列表,你可以很容易地把它变成一个递归函数

单向使用list comprehension

mylist = [[1,2],[4,5,6],[9],[]]
[ {} if not l else set(l) for l in mylist ]
#[{1, 2}, {4, 5, 6}, {9}, {}]

正如错误消息所暗示的,集合不能嵌套。但是,可以创建集合包装器来创建嵌套集合的表示:

class SetWrapper:
  def __init__(self, *args):
    self.v = set() if not args else args
  def __repr__(self):
    return "{}({})".format(self.__class__.__name__, str(self))
  def __str__(self):
    return '{'+', '.join(str(i) for i in self.v)+'}'


def wrap_set(f):
   def wrapper():
     return SetWrapper(*[i if type(i) not in [list, set] else SetWrapper(*i) for i in f()])
   return wrapper

@wrap_set
def get_list():
   return [[1,2],[4,5,6],[9],[]]  

print(get_list())

输出:

SetWrapper({{1, 2}, {4, 5, 6}, {9}, {}})

相关问题 更多 >