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

How to convert values inside nested lists into sets?

我想知道是否有人对如何转换嵌套列表中包含的值有任何想法,所以你最终得到一个集合列表的列表? 例如我有:

[[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() 一个可迭代序列,而单个整数不是。

>>> data = [[1,2,3],[4,5,6]]
>>> [[{j} for j in i] for i in data]
[[{1}, {2}, {3}], [{4}, {5}, {6}]]

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