将多集Java代码联合到python(范围内) - java

我在将Java中的Multiset类转换为Python时遇到麻烦。我对此有特殊问题
 这段Java代码到Python:

public Multiset unionWith(Multiset other)
{
    Multiset result = new Multiset();

    for ( Object object : elts.keySet() )
    {
        for ( int i = 0; i != elts.get(object); ++i )
        {
            result.add(object);
        }
    }

    for ( Object object : other.elts.keySet() )
    {
        for ( int i = 0; i != other.elts.get(object); ++i )
        {
            result.add(object);
        }
    }

    return result;
}

}

这是我完成的整个课程。除了unionWith之外,其他所有东西似乎都可以正常工作。我很确定问题出在“范围内”,并且有条件。这在python中如何工作?

class Multiset:
def __init__(self):
   self.elts= dict()

def contains(self, o):
    if o in self.elts.keys():
        return True
    else:
        return False

def add(self, o):
    if self.contains(o):
        newValue = self.elts.get(o) + 1
        self.elts[o] = newValue
    else:
        self.elts[o] = 1

def remove(self, o):
    if self.contains(o):
        newValue = self.elts.get(o) - 1

        if newValue > 0:
            self.elts[o] = newValue
        else:
            del self.elts[o]


def elements(self):
    return set(self.elts.keys())
@property
def size(self):
    total = 0

    for object in self.elts.values():
        total = total + self.elts.get(object)

    return total
def unionWith(self,other):
    result= Multiset()

    for object in self.elts.values():

        for i in range(0):
            if i is not self.elts.get(object):
                break
            result.add(object)

    for object in other.elts.values():
        for i in range(0):
            if i is not other.get(object):
                break
            result.add(object)

参考方案

我建议您使用魔术方法使您的类与python语言(例如__iter____contains__)更加集成:

import collections
import itertools

class Multiset:
    def __init__(self, iterable=None):
        self._data = collections.defaultdict(int)
        if iterable:
            self._data.update(collections.Counter(iterable))

    def __contains__(self, element):
        return element in self._data

    def add(self, element):
        self._data[element] += 1

    def remove(self, element):
        if element not in _data:
            raise KeyError(element)
        elif self._data[element] == 1:
            del self._data[element]
        else:
            self._data[element] -= 1

    def update(self, iterable):
        data = collections.Counter(self._data) + collections.Counter(iterable)
        self._data = collections.defaultdict(int)
        self._data.update(data)

    def elements(self):
        return self._data.keys()

    def __len__(self):
        return sum(self._data.values())

    def __iter__(self):
        return itertools.chain.from_iterable(
            itertools.repeat(element, number) 
                for element, number in self._data.items()
        )

    def union(self, other):
        result = Multiset(self)
        result.update(other)
        return result

    def __repr__(self):
        return 'Multiset([{}])'.format(
            ', '.join(repr(element) for element in self))

测试:

>>> s = Multiset()
>>> s
Multiset([])
>>> s.update('abca')
>>> s
Multiset(['a', 'a', 'c', 'b'])
>>> len(s) # calls __len__
>>> 'a' in s  # calls __contains__
True
>>> r = Multiset('zxc')
>>> r
Multiset(['x', 'c', 'z'])
>>> s.union(r)
Multiset(['a', 'a', 'x', 'c', 'c', 'b', 'z'])

可以实现更多功能,例如__add____sub__(差异),intersection ...

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

如何创建一种在Python中将事物添加到列表中的方法? - java

我的背景是Java,直到最近才学习如何在Java中进行一些面向对象的编程。我目前也在学习python,并且想知道此Java代码如何转换为python。假设我有一个HockeyPlayer类,该类具有jerseyNumber实例变量:public void addPlayer(HockeyPlayer h){ if(hockeyPlayers == null)…

Gradle构建失败:错误:任务':app:processDebugResources'的执行失败。 > java.nio.charset.MalformedInputException:输入长度= 1 - java

在Android Studio(版本2.3)中,当我尝试构建(或清理)任何项目时,出现此错误。Error:Execution failed for task ':app:processDebugResources'. > java.nio.charset.MalformedInputException: Input length =…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …