【问题标题】:How to construct a set out of list items in python?如何在python中构造一组列表项?
【发布时间】:2013-03-24 00:31:09
【问题描述】:

我在 python 中有一个list 的文件名,我想从所有文件名中构造一个set

filelist=[]
for filename in filelist:
    set(filename)

这似乎不起作用。怎么会这样?

【问题讨论】:

    标签: python list set


    【解决方案1】:

    如果你有一个可散列对象的列表(文件名可能是字符串,所以它们应该计算在内):

    lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]
    

    你可以直接构造集合:

    s = set(lst)
    

    事实上,set 可以用这种方式处理任何可迭代的对象!(duck 打字不是很好吗?)


    如果你想迭代地做:

    s = set()
    for item in iterable:
        s.add(item)
    

    但很少需要这样做。我只提到它是因为set.add 方法非常有用。

    【讨论】:

    • 我使用的是 2.7,这似乎不起作用。这里发生了什么? Python 2.7.13(默认,2017 年 7 月 24 日,14:22:59)[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] 在 darwin 上键入“帮助”、“版权”、“信用”或“许可证”以获取更多信息。 >>> x = [1,2,3] >>> set(x) set([1, 2, 3]) >>>
    • @user1902291-- 看起来它有效,你只是想跟踪结果集:y = set(x)
    • 另请注意,当您想从列表中过滤掉重复项时,从列表中添加项目可能非常有用。
    • s = {'foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis} 怎么样?
    • 是的,这行得通——尽管它实际上并没有按照 OP 的要求从项目列表中构建一个集合:)。这是一个集合字面量。
    【解决方案2】:

    最直接的解决办法是这样的:

    s = set(filelist)
    

    原始代码中的问题是这些值没有分配给 set。这是您的代码的固定版本:

    s = set()
    for filename in filelist:
        s.add(filename)
    print(s)
    

    【讨论】:

      【解决方案3】:

      你可以的

      my_set = set(my_list)
      

      或者,在 Python 3 中,

      my_set = {*my_list}
      

      从列表中创建一个集合。反过来,你也可以这样做

      my_list = list(my_set)
      

      或者,在 Python 3 中,

      my_list = [*my_set]
      

      从一个集合中创建一个列表。

      请注意,将列表转换为集合时,列表中元素的顺序通常会丢失,因为集合本质上是无序的。 (不过,CPython 中的一个例外似乎是列表仅包含非负整数,但我认为这是 CPython 中集合实现的结果,并且这种行为可能因不同的 Python 实现而异。)

      【讨论】:

        【解决方案4】:

        这是另一个解决方案:

        >>>list1=["C:\\","D:\\","E:\\","C:\\"]
        >>>set1=set(list1)
        >>>set1
        set(['E:\\', 'D:\\', 'C:\\'])
        

        在这段代码中,我使用 set 方法将其转换为集合,然后从列表中删除所有重复值

        【讨论】:

          【解决方案5】:

          简单地说:

          new_list = set(your_list)
          

          【讨论】:

            【解决方案6】:

            一种以迭代方式构造集合的一般方法,如下所示:

            aset = {e for e in alist}
            

            【讨论】:

              【解决方案7】:

              您也可以使用列表推导来创建集合。

              s = {i for i in range(5)}
              

              【讨论】:

                猜你喜欢
                • 2012-03-16
                • 2022-06-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-21
                • 2021-07-18
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多