0

考虑这个例子:

In [44]: exl_set = set(a.node)
In [45]: exl_set 
Out[45]: set(['1456030', '-9221969'])
In [46]: exl_set.add(b.node)
In [47]: exl_set
Out[47]: set(['1456030', ('-9227619', '1458170'), '-9221969'])

在不将它们与第一个分开的情况下,将tuples长度 2添加到 a 的最佳方法是什么?结果应如下所示:setadd

Out[48]: set([ ('-9221969','1456030'),('-9227619', '1458170')])
4

3 回答 3

3

将初始节点包装在列表或元组中:

exl_set = set([a.node])

不要将其解释为一系列值。

构造函数将set()参数解释为可迭代对象,并将该可迭代对象中的所有值添加到集合中;从文档

class set([iterable])
返回一个新的 set 或 freezeset 对象,其元素取自iterable

演示:

>>> node = ('1456030', '-9221969')
>>> set(node)
set(['1456030', '-9221969'])
>>> set([node])
set([('1456030', '-9221969')])
>>> len(set([node]))
1

或者,创建一个空集并set.add()专门使用:

exl_set = set()
exl_set.add(a.node)
exl_set.add(b.node)
于 2013-10-24T10:07:14.997 回答
1

初始化集合时,参数被视为可迭代,而不是单个项目。你可以这样做:

    >>>node = (1, 3)
    >>>node_set = set([node,]) #  initialize a set with a single ilement
    >>>node_set
    set([(1, 3)])

或者:

    >>>node = (1, 4)
    >>>node_set = set()  # initialize an empty set
    >>>node_set.add(node)  # add a single element
    >>>node_set
    set([(1, 4)])
于 2013-10-24T10:10:02.410 回答
1

要为其他时间旅行者更新此答案,另一种方法是使用集合文字,它可以节省先前答案的不必要的包装/解包过程:

node = (1, 2)
n_set = {node}
n_set

出 [17]: {(1, 2)}

于 2021-07-21T18:50:12.633 回答