【问题标题】:How to convert array of array into set in Python 3? [duplicate]如何将数组数组转换为 Python 3 中的集合? [复制]
【发布时间】:2018-08-10 15:35:16
【问题描述】:

我的输入:

list: [[2, 4], [2, 6], [2, 8]]

我想要的输出:

set: 2,4,6,8

我目前在做什么(不工作):

def convert(input_list):
    all_nums = set([arr[0], arr[1]] for arr in input_list)
    return all_nums

我知道我可以手动遍历父数组并将子数组的内容添加到set,如下所示:

def convert(input_list):
    all_nums = set()
    for inner_list in input_list:
        all_nums.add(inner_list[0])
        all_nums.add(inner_list[1])
    return all_nums
  • 如何以 pythonic 方式做到这一点?
  • 在第二种方法中,我可以执行all_nums.add(inner_list[0], inner_list[1]) 之类的操作吗?

【问题讨论】:

  • 你的意思是集合应该是1,2,3,4吗?
  • 是的..我的错误。更新了问题
  • 你的 6 和 8 在你的预期集合中来自哪里?您只想要扁平化输入列表中的一组所有数字吗?在这种情况下{1, 2, 3, 4}?
  • 他更新了他的输入,他的输出现在有意义了。
  • @user3483203 在第二种方法中,我可以执行 all_nums.add(inner_list[0], inner_list[1]) 之类的操作吗?

标签: python python-3.x


【解决方案1】:

简单地说:

my_list = [[2, 4], [2, 6], [2, 8]]
my_set = {e for l in my_list for e in l}

这是使用“集合理解”,它是以下内容的压缩版本:

my_list = [[2, 4], [2, 6], [2, 8]]
my_set = set()
for l in my_list:
    for e in l:
        my_set.add(e)

或者,您可以这样做:

my_list = [[2, 4], [2, 6], [2, 8]]
my_set = set()
for l in my_list:
    my_set.update(l)

(无耻地从modesitt盗取变量名。)

【讨论】:

  • 在第二种方法中我可以做类似 all_nums.add(inner_list[0], inner_list[1]) 的事情吗?
  • 你需要双括号,所以你要添加一个元组(不可变的、可散列的列表),但是是的。或者,您可以使用my_set = {(l[0], l[1]) for l in my_list}my_set = {tuple(l) for l in my_list}my_set = {(x, y) for x, y in my_list}
  • 在第二种方法中,all_nums.add((inner_list[0], inner_list[1])) 给出{(2, 8), (2, 6), (2, 4)}不是 {2, 4, 6, 8}
  • 我以为这就是你想要的......
  • 有没有一种方法可以获得 {2, 4, 6, 8} 而无需在 for 循环中单独添加它们(参见第二种方法)?
【解决方案2】:

使用itertools.chainset 的一种方法

例如:

from itertools import chain
l = [[1, 2], [1, 3], [1, 4]]
print(set(chain.from_iterable(l)))

输出:

set([1, 2, 3, 4])
  • chain 扁平化列表

【讨论】:

    【解决方案3】:

    你可以试试这个:

    from itertools import chain
    
    l = [[1, 2], [1, 3], [1, 4]]
    l = list(chain.from_iterable(l))
    set_l = set(l)
    

    【讨论】:

    • 顺便说一句,中间列表不需要。
    【解决方案4】:

    我会做以下事情

    set_ = {e for l in my_list for e in l}
    

    【讨论】:

    • 我可以窃取你的变量名吗?比我的 xyelement 和 list,我认为你的)更好,但我的回答有 2 个赞成票。
    • 当然!你赢得了那个比赛条件;)@wizzwizz4
    【解决方案5】:

    你可以使用集合推导:

    l = [[2, 4], [2, 6], [2, 8]]
    print({i for s in l for i in s})
    

    这个输出:

    {8, 2, 4, 6}
    

    【讨论】:

      猜你喜欢
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2019-01-05
      相关资源
      最近更新 更多