Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将嵌套列表中的值转换为集合?_Python_Set_Nested Lists - Fatal编程技术网

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

Python 如何将嵌套列表中的值转换为集合?,python,set,nested-lists,Python,Set,Nested Lists,我想知道是否有人对如何转换嵌套列表中包含的值有任何想法,所以最终会得到一个集合列表? e、 g我有: [[0, 1, 2, 3, 4, 0, 6, 7, 8], [1, 4, 5, ...], ...] 我正在尝试转换它,因此0是{0},1是{1}。i、 e: [[{0}, {1}, {2}, {3}, {4}, {0}, {6}, {7}, {8}], [{1}, {4}, {5}, ...], ...] 我目前有: def ToSets(list): for i in range

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

[[0, 1, 2, 3, 4, 0, 6, 7, 8], [1, 4, 5, ...], ...]
我正在尝试转换它,因此
0
{0}
1
{1}
。i、 e:

[[{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()
一个iterable序列,而单个整数不是

>>> data = [[1,2,3],[4,5,6]]
>>> [[{j} for j in i] for i in data]
[[{1}, {2}, {3}], [{4}, {5}, {6}]]
set()
从iterable中获取值并分别添加每个值。您传入了一个
int
,它根本不可编辑

您必须将各个值包装在一个iterable中,如列表:

list[i][j] = set([list[i][j]])
一个更简单的选择是使用
{…}
集合文字符号:

list[i][j] = {list[i][j]}
如果列表不需要就地更新,还可以使用创建新的集合列表列表结构:

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

将每个元素转换成一个单例集合有什么意义?可以通过以下方式实现:
[[{y}在x中表示y]在我的列表中表示x]
。但你为什么要这样?你的问题标题有误导性。您没有转换嵌套列表。您正在用单个值集替换嵌套列表中的值。问题:您当前试图就地更新列表,因此对列表的其他引用将看到更改。这有多重要?可以改为创建集合列表的新列表吗?请注意,在生成新列表的同时,OP会将列表更新到位。这是您需要明确说明的一个关键区别。我希望使用此方法,但是当我尝试您的建议(list[I][j]={list[I][j]})时,我得到了一个“unhasable type:set”错误。@user9080591可能您的一些元素已经在执行以前的代码时更新为set值。请创建一个新列表并传递给函数,它应该work@user9080591:这意味着您的真实数据已经有一些集合,您不能将
set()
对象放在另一个集合中。@user9080591:检查您的数据。你有三个选择:1。请使用没有集合的干净数据集重试。2.跳过设置对象(您可以使用
try…except
或使用
isinstance()
测试对象类型)和3。在将集合包装成集合之前,先将集合转换为
frozenset()
对象。我只有一个列表列表,其中根本没有集合。Moinuddin,你的第一种方法很好,但我想用两个'for'语句来实现,这样我就可以将集合0更改为另一个集合。我看不出有没有办法用你的简单方法来做这件事?