如何在Python 3中将数组转换成集合?

时间:2018-08-10 15:35:16

标签: python python-3.x

我输入的内容:

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

5 个答案:

答案 0 :(得分:3)

简单地:

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

答案 1 :(得分: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将列表弄平

答案 2 :(得分:1)

您可以尝试以下方法:

from itertools import chain

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

答案 3 :(得分:0)

我会做以下

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

答案 4 :(得分:0)

您可以使用集合理解:

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

这将输出:

{8, 2, 4, 6}