例如,给定列表['one', 'two', 'one'],算法应该返回True,而给定['one', 'two', 'three']它应该返回False.
我最近遇到了一些Java代码,它们简单地将一些字符串放入Java TreeSet中,为它实现了一个基于距离的比较器,然后以快乐的方式进入日落以计算给定的分数来解决给定的问题.
我的问题,
是否有可用于Python的等效数据结构?
我看到有一个针对 OrderedDict的Py3K的PEP,但我使用的是2.6.x. 那里有一堆有序的dict实现 - 特别是可以推荐的任何人?
PS,我想补充-我可以大概导入DictMixin或UserDict中,并实现自己的排序/有序字典,并使其发生通过比较器功能-但是,这似乎是矫枉过正.
谢谢.
更新.谢谢你的回答.为了详细说明,我可以说我有一个定义的比较函数,(给定一个特定的值ln),
def mycmp(x1, y1, ln):
a = abs(x1-ln)
b = abs(y1-ln)
if a<b:
return -1
elif a>b:
return 1
else:
return 0
Run Code Online (Sandbox Code Playgroud)
我有点不确定如何将这个集成到这里给出的有序字典链接中给出的顺序中.
就像是,
OrderedDict(sorted(d.items(), cmp=mycmp(len)))
Run Code Online (Sandbox Code Playgroud)
我们欢迎您的想法.
我想知道是否有一个清晰/简洁的方法来添加一些东西,并检查它是否添加没有2x哈希和查找.
这是你可能会做的,但它有2x hash的项目
if item not in some_set: # <-- hash & lookup
some_set.add(item) # <-- hash & lookup, to check the item already is in the set
other_task()
Run Code Online (Sandbox Code Playgroud)
这适用于单个散列和查找,但有点难看.
some_set_len = len(some_set)
some_set.add(item)
if some_set_len != len(some_set):
other_task()
Run Code Online (Sandbox Code Playgroud)
使用Python的set api有更好的方法吗?
在Java中,我喜欢使用"添加到集合"操作返回的布尔值来测试元素是否已经存在于集合中:
if (set.add("x")) {
print "x was not yet in the set";
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,Python中有什么方便吗?我试过了
z = set()
if (z.add(y)):
print something
Run Code Online (Sandbox Code Playgroud)
但它没有打印任何东西.我错过了什么吗?谢谢!
所以这是我的时间:
>>> import timeit
>>> timeit.timeit(lambda: set(l))
0.7210583936611334
>>> timeit.timeit(lambda: {*l})
0.5386332845236943
Run Code Online (Sandbox Code Playgroud)
为什么这样,我的意见是平等的,但事实并非如此.
因此,从这个例子中拆包很快,对吧?