我想知道是否有人对如何转换嵌套列表中包含的值有任何想法,所以你最终得到一个集合列表的列表? 例如我有:
[[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/