如何将tuple赋值给set时不拆分成员单独添加?
解决Python中tuple/namedtuple存入set时不被拆分的问题
当直接把tuple(包括namedtuple实例)传给set()构造函数时,因为tuple是可迭代对象,构造函数会遍历它的所有元素,把每个元素单独加入集合——就像你例子里的Point(5,5),会被拆成两个5,最终集合里只剩{5}。
要把整个tuple/namedtuple对象作为集合的单个元素,有两种简单方法:
方法一:用单元素容器包裹后传入set()
把目标对象放到列表或元组里,让set()遍历这个容器时,只取出你要的那个对象:
from collections import namedtuple Point = namedtuple('Point', 'x y') p = Point(5, 5) # 用列表包裹 s1 = set([p]) # 或者用元组(注意末尾的逗号,避免被当成括号表达式) s2 = set((p,)) print(s1) # 输出 {Point(x=5, y=5)} print(s2) # 输出 {Point(x=5, y=5)}
方法二:使用集合的add()方法
add()方法专门用来添加单个元素,不会对传入的对象做迭代拆分,直接把整个对象存入集合:
from collections import namedtuple Point = namedtuple('Point', 'x y') p = Point(5, 5) s = set() s.add(p) print(s) # 输出 {Point(x=5, y=5)}
内容的提问来源于stack exchange,提问作者Martin CR
相关产品推荐
相关产品推荐

