Python 如何创建一个输入为对象或可编辑的集合

Python 如何创建一个输入为对象或可编辑的集合,python,Python,我希望从输入参数创建一个集合,但我希望输入参数是集合或单个对象。如果传递了一个集合,则结果保持为集合,如果在集合中传递了一个对象,则该集合将仅包含该单个对象 我希望能做到 set(object) 但这是一个错误 TypeError:“int”对象不可编辑(如果对象的类型为int) 您可以使用with检查对象并从原始对象或具有单个元素的元组创建集 from collections.abc import Iterable ... new_set = set(object if isinstance

我希望从输入参数创建一个集合,但我希望输入参数是集合或单个对象。如果传递了一个集合,则结果保持为集合,如果在集合中传递了一个对象,则该集合将仅包含该单个对象

我希望能做到

set(object)
但这是一个错误

TypeError:“int”对象不可编辑(如果对象的类型为int)

您可以使用with检查
对象
并从原始对象或具有单个元素的元组创建

from collections.abc import Iterable
...
new_set = set(object if isinstance(object, Iterable) else (object, ))
另一个如何检查对象是否可编辑的选项是,如果出现
TypeError
错误,则尝试从原始对象创建集合,并从元组创建集合:

try:
    new_set = set(object) # will throw TypeError is object is not iterable
except TypeError:
    new_set = set((object, ))

我认为实现这一点最简洁的方法是使用
.update
和捕获
TypeError
。这也适用于更新以前创建的非空集

input_int = 1
input_set = {2, 3}
new_set = set()

def update_set(s, obj):
    try:
        s.update(obj)
    except TypeError:
        s.update([obj])

update_set(new_set, input_int)
update_set(new_set, input_set)
print(new_set)
输出

{1, 2, 3}

我不确定你的最终目标到底是什么。在这两种情况下,您希望最终拥有什么样的数据结构?在这两种情况下,setI都有点困惑,您期望的
对象类型是什么?@Green可以是可Iterable,也可以是不可Iterable,但为什么您需要定义函数来更新已创建的空集,而不是创建新的?@OlvinRoght,因为这是最通用的方法<代码>新设置
可能不是新设置。OP可能想添加到以前创建的集合是的,可能是的,我只是不认为这有问题。@OlvinRoght我喜欢以更一般的方式回答问题。从后续问题/编辑中保存OP和us