当前位置: 首页 > 面试题库 >

Java的TreeSet是否等效于Python?

鄢开诚
2023-03-14
问题内容

最近,我遇到了一些Java代码,这些代码简单地将一些字符串放入Java
TreeSet中,为其实现了基于距离的比较器,然后在日落时分快乐地计算出给定的分数来解决给定的问题。

我的问题

  • 是否有适用于Python的等效数据结构?

    • Java树集看起来基本上是一个有序字典,可以使用某种比较器来实现这种排序。
    • 我看到有一个用于 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

我不确定如何将其集成到此处给出的有序dict
链接中给出的排序中。

就像是,

OrderedDict(sorted(d.items(), cmp=mycmp(len)))

想法将受到欢迎。


问题答案:

的Python 2.7
文档collections.OrderedDict具有指向在Python
2.4或更高版本上运行的OrderedDict配方的链接。

编辑:
关于排序:使用key=而不是cmp=。它倾向于导致更快的代码,此外,该cmp=关键字在Python3中已被删除。

d={5:6,7:8,100:101,1:2,3:4}
print(d.items())
# [(1, 2), (3, 4), (100, 101), (5, 6), (7, 8)]

您发布的代码mycmp并不清楚您要传递的代码x1。下面,我假定X1应该是所述 中的每个键-值对。如果是这样,您可以执行以下操作:

length=4
print(sorted(d.items(),key=lambda item: abs(item[1]-length) ))
# [(3, 4), (1, 2), (5, 6), (7, 8), (100, 101)]

key=...传递了一个函数lambda item: abs(item[1]-length)。对于每个itemin
d.items(),lambda函数将返回数字abs(item[1]-length)。就排序而言,此数字充当项目的代理。有关在Python中对习惯用语进行排序的更多信息,请参见本文。

PS。len是Python的内置函数。为了避免麻烦len,我将变量名称更改为length



 类似资料:
  • 问题内容: 我知道我们可以使用Java中的方法通过指定其位置来获取字符串中的单个字符。C#中有等效的方法吗? 问题答案: 您可以像数组一样索引C#中的字符串,然后在该索引处获取字符。 例: 在Java中,您会说 在C#中,您会说

  • 本文向大家介绍C#是否等效于Java的Thread.setDaemon?,包括了C#是否等效于Java的Thread.setDaemon?的使用技巧和注意事项,需要的朋友参考一下 与Java的Thread.setDaemon等效的C#是前台线程和后台线程的概念。 当前台线程关闭时,后台线程将终止。前台线程继续运行,直到最后一个前台线程终止。 用于后台线程的属性是IsBackground,该属性获取

  • 问题内容: Java是否具有等效于Python 方法的方法? 问题答案: Guava还提供类似于Python的东西: 您也可以使用Guava的AbstractIterator实现一个相当简单的迭代器来执行相同的操作:

  • 问题内容: 我有两个对象,想要将它们配对,就像Python中的函数一样。我很确定JDK中没有此功能,但是在相当广泛的库中是否有类似Apache通用收藏集的类似内容?谢谢。 问题答案: 功能Java具有,以及您对Haskell或Scala的期望。(实际上,作者几乎都是Haskell程序员。)

  • 问题内容: 在Python中,该函数允许您迭代一系列(索引,值)对。例如: 用Java有什么办法吗? 问题答案: 对于实现接口的集合,您可以调用方法以获取。迭代器(还有其他方法)有两种方法- ,以获得索引;和,以获取值(与其他迭代器一样)。 因此,上述Python的Java等效项可能是: 与Python一样,它输出:

  • 问题内容: 我正在配置Java客户端,它的工作是建立与服务器的TLS连接。我想使用以下3种密码配置客户端: 在Java支持的密码套件中,我找到了相同的密码,但是开头是SSL,而不是TLS。问题是,如果我用以下方法配置了客户端: 这两个列表是否完全相同,并且服务器将对其进行解释?我担心是否为客户端配置了密码,这意味着与某些不同,并且可能某些服务器不支持。我如何确定? 问题答案: 是的,它们是相同的。