【问题标题】:How to convert a set to a list in python?如何在python中将集合转换为列表?
【发布时间】:2011-09-29 10:55:01
【问题描述】:

我正在尝试在 Python 2.6 中将集合转换为列表。我正在使用这种语法:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

但是,我得到以下堆栈跟踪:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'set' object is not callable

我该如何解决这个问题?

【问题讨论】:

  • 在 Linux 上的 Python 2.6.6 上为我工作......但第一行并没有创建一个集合。
  • 根据TypeError: 'set' object is not callable:什么是set?谢谢
  • 你已经隐藏了 set 内置函数。也许您不小心输入了set=set(first_list) 或其他内容。现在 set 被重新定义为这个 set 对象,这将导致该错误。使用新的 Python 解释器重试
  • @gnibbler:你应该把它作为答案,因为这显然是破坏它的原因。
  • 问题已被编辑以纠正问题,这太糟糕了。看到正确的代码后跟它不会生成的错误会令人困惑。实际上,编辑之前的原始问题也不会导致显示的错误。我怀疑这是复制和粘贴错误。

标签: python list set python-2.6


【解决方案1】:

已经是列表了:

>>> type(my_set)
<class 'list'>

你想要类似的东西:

>>> my_set = set([1, 2, 3, 4])
>>> my_list = list(my_set)
>>> print(my_list)
[1, 2, 3, 4]

编辑: 您上一条评论的输出:

>>> my_list = [1,2,3,4]
>>> my_set = set(my_list)
>>> my_new_list = list(my_set)
>>> print(my_new_list)
[1, 2, 3, 4]

我想知道你是否做过这样的事情:

>>> set = set()
>>> set([1, 2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable

【讨论】:

  • 当我做 type(my_set) 我得到
  • @gath,那是在您编辑代码之前。您当前的代码在我的机器上运行良好。您可以尝试将其复制粘贴到 python 解释器中,然后将输出粘贴到此处
  • 试试这个:>>> my_list = [1,2,3,4] >>> my_set = set(my_list) >>> my_new_list = list(my_set) Traceback(最近一次通话最后一次) :文件“”,第 1 行,在 TypeError: 'set' object is not callable
  • 我打赌他不小心将名称“set”绑定到 {1,2,3} 或 [1,2,3] 或类似的东西。 (因为我在实验的时候不小心做了)
  • 使用这种方法转换一个整数列表是不可靠的:如果你的集合是([1,2,12,6])并且你做了list(([1,2,12,6]))你会得到一个类似[1,2,1,2,6]的列表
【解决方案2】:

代替:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

为什么不缩短流程:

my_list = list(set([1,2,3,4])

这将从您的列表中删除受骗者并将列表返回给您。

【讨论】:

  • 两者没有区别。您刚刚内联了变量赋值。
【解决方案3】:

[已编辑] 看来您之前已经重新定义了“列表”,将其用作变量名,如下所示:

list = set([1,2,3,4]) # oops
#...
first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

你会得到

Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'set' object is not callable

【讨论】:

    【解决方案4】:

    每当遇到此类问题时,请先尝试使用以下方法找到要转换的元素的数据类型:

    type(my_set)
    

    然后,使用:

      list(my_set) 
    

    将其转换为列表。您现在可以像使用 python 中的任何普通列表一样使用新建的列表。

    【讨论】:

      【解决方案5】:

      简单输入:

      list(my_set)
      

      这会将 {'1','2'} 形式的集合转换为 ['1','2'] 形式的列表。

      【讨论】:

        【解决方案6】:

        查看您的第一行。您的堆栈跟踪显然不是来自您在此处粘贴的代码,所以我不确切知道您做了什么。

        >>> my_set=([1,2,3,4])
        >>> my_set
        [1, 2, 3, 4]
        >>> type(my_set)
        <type 'list'>
        >>> list(my_set)
        [1, 2, 3, 4]
        >>> type(_)
        <type 'list'>
        

        你想要的是set([1, 2, 3, 4])

        >>> my_set = set([1, 2, 3, 4])
        >>> my_set
        set([1, 2, 3, 4])
        >>> type(my_set)
        <type 'set'>
        >>> list(my_set)
        [1, 2, 3, 4]
        >>> type(_)
        <type 'list'>
        

        “不可调用”异常意味着您正在执行类似 set()() 的操作 - 尝试调用 set 实例。

        【讨论】:

          【解决方案7】:

          我不确定您是否使用这种([1, 2]) 语法创建了一个集合,而不是一个列表。要创建集合,您应该使用set([1, 2])

          这些括号只是包裹着你的表情,好像你会这样写:

          if (condition1
              and condition2 == 3):
              print something
          

          并没有真正被忽视,但对你的表情没有做任何事情。

          注意:(something, something_else) 将创建一个元组(但仍然没有列表)。

          【讨论】:

          • @gath 你的编辑对我来说似乎很好,至少在第一块。你还有错误吗?你可以在新的命令行中试试这个吗?只输入set 会得到什么?
          【解决方案8】:

          Python 是一种动态类型语言,这意味着您不能像在 C 或 C++ 中那样定义变量的类型:

          type variable = value
          

          type variable(value)
          

          在 Python 中,如果您更改类型,则使用强制转换,或者类型的 init 函数(构造函数)来声明一个类型的变量:

          my_set = set([1,2,3])
          type my_set
          

          会给你&lt;type 'set'&gt; 的答案。

          如果您有列表,请执行以下操作:

          my_list = [1,2,3]
          my_set = set(my_list)
          

          【讨论】:

            【解决方案9】:

            嗯,我敢打赌,在前面的几行中,您有类似的内容:

            list = set(something)
            

            我错了吗?

            【讨论】:

            • 正如上面一个答案中提到的,您也有相同的假设。在问题的主要代码中可能将list 设置为等于创建集set(values)。这让人感到困惑。你的答案不应该被否决。但它也没有吸引读者:) 我们只是略读并看到错误的东西投反对票。
            猜你喜欢
            • 2013-12-16
            • 2014-11-24
            • 2010-10-09
            • 2017-02-27
            • 1970-01-01
            • 1970-01-01
            • 2011-01-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多