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

标签 python set nested-lists

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

[[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]])

一个更简单的选择是使用 {...} set literal notation:

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

关于python - 如何将嵌套列表中的值转换为集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065637/

相关文章:

Python如何遍历列表并比较其中找到的字符串列表

python - 如何创建嵌套列表并在每个嵌套中放置特定数量的元素?列表和它的嵌套元素总是不一样的

python - Pandas:删除有限的重复项

python - 有没有办法让 pandas read_csv 函数更快

javascript - Javascript中的一组数字对

linq - 查找所有元素共有的值

python - 在 Django 中使用数据库按日期排序

Python3-在函数内调用 exec(open().read()) 的问题

scala - map 上的 FlatmapValues

python - 如何在嵌套列表中查找所有列表共有的元素?