Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3中如何将数组的数组转换为集合?_Python_Python 3.x - Fatal编程技术网

在Python3中如何将数组的数组转换为集合?

在Python3中如何将数组的数组转换为集合?,python,python-3.x,Python,Python 3.x,我的意见是: list: [[2, 4], [2, 6], [2, 8]] def convert(input_list): all_nums = set([arr[0], arr[1]] for arr in input_list) return all_nums 我想要的输出: set: 2,4,6,8 我目前正在做什么(不工作): list: [[2, 4], [2, 6], [2, 8]] def convert(input_list): all_nums

我的意见是:

list: [[2, 4], [2, 6], [2, 8]]
def convert(input_list):
    all_nums = set([arr[0], arr[1]] for arr in input_list)
    return all_nums
我想要的输出:

set: 2,4,6,8
我目前正在做什么(不工作):

list: [[2, 4], [2, 6], [2, 8]]
def convert(input_list):
    all_nums = set([arr[0], arr[1]] for arr in input_list)
    return all_nums
我知道我可以手动迭代父数组,并将子数组的内容添加到
集合中,如下所示:

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的方式实现这一点

  • 在第二种方法中,我可以执行类似于
    所有nums.add(内部列表[0],内部列表[1])

使用
itertools.chain
set

Ex:

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

from itertools import chain
l = [[1, 2], [1, 3], [1, 4]]
print(set(chain.from_iterable(l)))
set([1, 2, 3, 4])
  • chain
    将列表展平
简单地说:

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)
(不知羞耻地从中盗取变量名。)

您可以尝试以下方法:

from itertools import chain

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

我会做下面的事情

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

您可以使用集合理解:

l = [[2, 4], [2, 6], [2, 8]]
print({i for s in l for i in s})
这将产生:

{8, 2, 4, 6}

你的意思是这一套应该是1,2,3,4吗?是的,我错了。更新了问题你的6和8是从哪里来的?您是否只需要平展输入列表中的一组所有数字?在这种情况下,
{1,2,3,4}
?他更新了他的输入,他的输出现在有意义了。@user3483203在第二种方法中,我可以做一些类似于所有nums.add(内部列表[0],内部列表[1])的事情吗?顺便说一下,不需要中间列表。我可以窃取您的变量名吗?比我的
x
y
e
lement和
l
ist更好,我想你的答案是)但是我的答案有2票赞成。当然!你赢得了比赛条件;)@WIZZWIZZ4在第二种方法中,我可以像all_nums.add(内部_列表[0],内部_列表[1])这样做吗?您需要双括号,所以您要添加一个元组(不可变,哈希列表),但可以。或者,您可以对我的列表中的l执行
my_set={(l[0],l[1])
my_set={tuple(l)for l in my_list}
my_set={(x,y)for x,y in my_list}
在第二种方法中执行
所有nums.add((内部_list[0],内部_list[1])
给出
(2,8)、(2,6)、(2,4)而不是{6}我以为这就是你想要的…有没有一种方法可以得到{2,4,6,8},而不在for循环中单独添加它们(参见第二种方法)?