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

问题描述 投票:0回答:3

极客/书呆子/同胞Python教徒借给我你的耳朵!

我在Python 2.7中编写了一个使用set()函数的脚本。这是一种内置数据结构,仅用于存储唯一值。但是我在不同的环境中运行脚本。我知道我应该在与生产环境相同的环境中编码。所以在生产环境中有一个古老版本的python运行。据我所知,这是Python 2.2。此外,这个Python解释器在Java虚拟机(JVM)上运行,这使得这个Jython成为可能。很酷。 :)无论如何,无论出于何种原因,此版本的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)
python jython wlst jython-2.2
3个回答
5
投票

首先,你可能不会被困在Jython 2.2上。看起来2.2.1是你的WLST附带的,但谷歌建议you may be able to use WLST with Jython 2.7。如果你可以使用2.7,这可能是一个比2.2更好的环境。 (它仍然非常符合非Jython标准,但它超过了2.2。)


如果这不可行,仍然不要使用列表。回到set不存在时,做套装的方法是用dict你忽略了它的值。与set相同的时间复杂性,不像你试图使用list工作时得到的那样。在内置的sets类型之前出现的旧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

2
投票

我建议你使用dict的键。只需将值设置为轻量级,如1


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,这是原始Greg Wilson实施的一个小分支,sets也是一个分支。

© www.soinside.com 2019 - 2024. All rights reserved.