如何在古代Python / Jython中滚动我自己的集合?

时间:2018-09-07 23:24:00

标签: python jython wlst jython-2.2

怪胎/书呆子/资深Python主义者借给我你的耳朵!

我在Python 2.7中编写了一个使用set()函数的脚本。这是仅用于存储唯一值的内置数据结构。但是,我在不同的环境中运行脚本。我知道我应该在与生产环境相同的环境中进行编码。因此,在生产环境中,运行着一个古老的python版本。据我了解,这是Python 2.2。另外,此Python解释器在创建此Jython的Java虚拟机(JVM)上运行。很酷。 :)无论出于何种原因,此版本的Python中都不包含set()数据结构。 无论如何,我可以使用列表创建自己的集合,然后仅查找唯一值吗?目前,这种类型的算法编写使我头疼。有人可以指出我的帮助方向吗?

运行此代码时,我看到版本是Python 2.2。

import sys
print sys.version_info

此代码返回:(2, 2, 1, 'final', 0)

引发错误的代码是:

machine_set = set() #create a set, an empty set at that

我收到的错误如下:

<me@linuxbox ~>$ java -cp $WEBLOGIC weblogic.WLST lolcats.py

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Problem invoking WLST - Traceback (innermost last):
  File "/home/oracle/lolcats.py", line 18, in ?
TypeError: set() takes at least 2 arguments (0 given)

3 个答案:

答案 0 :(得分:5)

首先,您可能不会停留在Jython 2.2上。 WLST附带的内容似乎是2.2.1,但Google建议使用you may be able to use WLST with Jython 2.7。如果可以使用2.7,则可能是比2.2更好的环境。 (按非Jython标准,它的日期仍然很旧,但它超过了2.2。)


如果仍然不可行,请不要使用列表。早在set不存在时,进行设置的方法就是使用dict来忽略其值。与set相同的时间复杂度,与您尝试使用list完成工作所得到的时间复杂度不同。内置set类型之前的旧sets模块实际上是作为字典的包装器实现的,如果您使用的是2.3,我建议使用sets.Set,但是您可以重新上2.2。

# Add a value
d[val] = None

# Remove a value
del d[val]

# Check if a value exists (good thing it's not 2.1, or you'd need has_key)
key in d

答案 1 :(得分:2)

我建议为您的集合使用字典键。只需将值设置为轻量级的值即可,例如1

答案 2 :(得分:1)

Python 2.3-2.7有一个sets模块(在2.6+中已弃用,因为新的内置setfrozenset做同样的事情,但效果更好)。

您在2.2中没有此功能,但是该模块是在纯Python中实现的。因此,假设您尊重Python license,则可以copy it from the 2.3 source进入项目。实际上,我在一个古老的项目中有一些以此开头的代码:

try:
    set
except NameError:
    try:
        from sets import Set as set
    except ImportError:
        from sets23 import Set as set

…表示仅将2.3的sets.py复制为sets23.py到项目中就可以使用2.2。但是我没有2.2可以测试,所以……我不会承诺,它没有任何移植就可以工作,但是我认为可以。


或者,sets文档中提到的那些历史早于2.3的集合类在ActiveState recipes collection中仍然可用。并非一切都migrated to the GitHub repo(或者,如果已经完成,则新搜索还没有完成),但是我可以看到106469_Yet_another_Set_class_for_Python,它是{{1 }}也是它的一个分支。