在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循环中单独添加它们(参见第二种方法)?