如何将嵌套列表中的值转换为集合?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将嵌套列表中的值转换为集合?相关的知识,希望对你有一定的参考价值。
我想知道是否有人有任何关于如何转换嵌套列表中包含的值的想法,所以你最终得到一组列表的列表?我有:
[[0, 1, 2, 3, 4, 0, 6, 7, 8], [1, 4, 5, ...], ...]
我试图转换这个,所以0
是{0}
,1
是{1}
。即:
[[{0}, {1}, {2}, {3}, {4}, {0}, {6}, {7}, {8}], [{1}, {4}, {5}, ...], ...]
我目前有:
def ToSets(list):
for i in range(0,9): #row
for j in list[i]:
list[i][j] = set(list[i][j])
print(list)
我一直收到这个错误:
TypeError: 'int' object is not iterable
有谁知道我怎么解决这个问题?
答案
set()
从迭代中获取值并分别添加每个值。你传入了int
,它根本不可迭代。
您必须将您的单个值包装在可迭代中,如列表:
list[i][j] = set([list[i][j]])
一个更容易的选择是使用{...}
集文字表示法:
list[i][j] = {list[i][j]}
如果列表不需要更新,您还可以使用nested list comprehension创建新的列表列表结构:
def to_sets(l):
return [[{i} for i in row] for row in l]
如果必须就地更新,至少只迭代外部行,并使用enumerate()
生成内部列的索引:
def to_sets_inplace(l):
for row in l:
for i, value in enumerate(row):
row[i] = {value}
如果您对原始列表列表有其他引用,请坚持直接设置值,否则使用列表推导。两者都有效:
>>> def to_sets(l):
... return [[{i} for i in row] for row in l]
...
>>> demo = [[0, 1, 2, 3, 4, 0, 6, 7, 8], [1, 4, 5]]
>>> def to_sets_inplace(l):
... for row in l:
... for i, value in enumerate(row):
... row[i] = {value}
...
>>> to_sets(demo)
[[{0}, {1}, {2}, {3}, {4}, {0}, {6}, {7}, {8}], [{1}, {4}, {5}]]
>>> to_sets_inplace(demo)
>>> demo
[[{0}, {1}, {2}, {3}, {4}, {0}, {6}, {7}, {8}], [{1}, {4}, {5}]]
另一答案
您可以传递{}
中的每个元素来创建一个集合,否则您必须将set()
传递给一个可迭代的序列,而单个整数则不能。
>>> data = [[1,2,3],[4,5,6]]
>>> [[{j} for j in i] for i in data]
[[{1}, {2}, {3}], [{4}, {5}, {6}]]
以上是关于如何将嵌套列表中的值转换为集合?的主要内容,如果未能解决你的问题,请参考以下文章