如何在古老的Python/Jython中滚动我自己的设置?

2024-09-29 23:16:31 发布

您现在位置:Python中文网/ 问答频道 /正文

怪人/书呆子/Python同伙借我你的耳朵!你知道吗

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

运行这段代码时,我看到的版本是python2.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)

Tags: 代码py版本脚本数据结构环境错误sys
3条回答

首先,你可能不会被Jython2.2困住。看起来2.2.1是您的WLST附带的,但是Google建议you may be able to use WLST with Jython 2.7。如果你能使用2.7,那可能是一个比2.2更好的环境。(按照非Jython标准,它仍然相当过时,但它胜过了2.2。)


如果这不可行,仍然不要使用列表。当set不存在时,处理集合的方法是使用dict忽略的值。与set相同的时间复杂度,不同于您尝试将list用于作业时得到的复杂度。内置set类型之前的旧^{}模块实际上是作为dicts的包装器实现的,如果您使用的是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。你知道吗

python2.3-2.7有一个^{}模块(在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测试,所以…我不会保证它在没有任何移植的情况下工作,但是我认为它可以。你知道吗


或者,sets文档中提到的那些2.3以前的历史set类仍然可以在ActiveState recipes collection中使用。并不是所有的东西都是migrated to the GitHub repo(或者,如果有的话,新的搜索是不完整的),但是我可以看到^{},它是Greg Wilson原始实现的一个小分支,sets也是一个分支。你知道吗

相关问题 更多 >

    热门问题