如何将数组的数组转换为 Python 3 中的集合?

新手上路,请多包涵

我有什么作为输入:

 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]) 的事情吗?

原文由 noobie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 747
2 个回答

简单地:

 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 窃取。)

原文由 wizzwizz4 发布,翻译遵循 CC BY-SA 4.0 许可协议

一种方法使用 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 压平列表

原文由 Rakesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题