为什么在Python中不能统一处理集合?

前端之家收集整理的这篇文章主要介绍了为什么在Python中不能统一处理集合?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
集合和列表在 Python中的处理方式不同,似乎没有统一的方法可以同时使用它们.例如,使用add方法将项添加到集合中,对于列表,使用append方法完成.我知道这背后有不同的语义,但也存在常见的语义,并且通常与某些集合一起使用的算法更多地关注共性而不是差异. C STL表明这可以工作,为什么Python中没有这样的概念?

编辑:在C中,我可以使用output_iterator将值存储在(几乎)任意类型的集合中,包括列表和集合.我可以编写一个算法,它将这样的迭代器作为参数并将元素写入其中.然后,该算法完全不知道支持迭代器的容器(或其他设备,可能是文件)的类型.如果后备容器是忽略重复项的集合,那么这是调用者的决定.我的具体问题是,现在我已经多次使用过,例如我用了一个特定任务的列表,然后决定该集更合适.现在我必须更改附加内容添加到我的代码中的几个位置.我只是想知道为什么Python没有这种情况的概念.

解决方法

直接回答:这是一个设计缺陷.

您应该能够使用相同的方法名称插入任何通用插入有意义的容器(例如,排除dict).插入应该有一致的通用名称,例如.添加,对应于set.add和list.append,这样您就可以添加到容器中而无需关心插入的内容.

在不同类型中对此操作使用不同的名称是无偿的不一致,并且设置了较差的基本标准:库应该鼓励用户容器使用一致的API,而不是为每个基本容器提供大部分不兼容的API.

也就是说,在这种情况下,它通常不是一个实际问题:大多数情况下,函数的结果是项目列表,将其实现为生成器.它们允许一致地(从函数的角度)处理这两者,以及其他形式的迭代:

def foo():
    yield 1
    yield 2
    yield 3

s = set(foo())
l = list(foo())
results1 = [i*2 for i in foo()]
results2 = (i*2 for i in foo())
for r in foo():
    print r
原文链接:https://www.f2er.com/python/186588.html

猜你在找的Python相关文章