如何将嵌套列表中的值转换为集合?

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}]]

以上是关于如何将嵌套列表中的值转换为集合?的主要内容,如果未能解决你的问题,请参考以下文章

如何将集合转换为列表?

将嵌套集合转换为平面数据表

如何将列表视图中的数据从一个片段发送到另一个片段

SQL(雅典娜)中的取消嵌套:如何将结构数组转换为从结构中提取的值数组?

在 R 中使用混合类型将嵌套列表中的字符数字转换为数字

列表中嵌套字典,根据字典的值排序