在python3中扩展一个类,这样就可以迭代ls\u1和ls\u2的索引i处的元素对

2024-05-16 04:10:18 发布

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

我正在尝试实现Pair类。一个Pair对象包含两个列表ls_1ls_2.

然后,扩展这个类,这样就可以在index ils_1ls_2对元素进行迭代Index i0开始。 这是我目前的代码:

class Pair:
    def __init__(self, l, k):
        self.l = l
        self.k = k

    def __iter__(l):
        return Pair(l)

    def __iter__(k):
        return Pair(k)

    def __next__(self):
        x = iter(self.l)
        y = iter(self.k)
        nad = x.__next__()
        raf = y.__next__()
        return (nad,raf)

我试着用下面的列表来运行它

l = [1, 2, 3, 4, 5]

k = [0, 9, 8]

pair = Pair(l, k)

print(next(pair))  

print(next(pair))  

print(next(pair))  

print(next(pair))  

我希望它会返回这样的结果:

(1,0)

(2,9)

(3,8)

(4, None)

但是我得到了:

(1,0)

(1,0)

(1,0)

(1,0)

Tags: 对象self元素列表indexreturndefls
1条回答
网友
1楼 · 发布于 2024-05-16 04:10:18

首先,很难理解您的代码,因为它的格式不好,但您的问题可以很简单地解决。只需看看下面的代码(有注释,所以应该自我解释)

class Pair(object):

    def __init__(self, l, k):
        self._l = l
        self._k = k
        self._index = 0  # Current index in a list

    def __next__(self):
        # Get value form a list using current index value
        # or return None if index is out of range in current list
        x = self._l[self._index] if self._index < len(self._l) else None
        y = self._k[self._index] if self._index < len(self._k) else None
        # Reset index and return self using new index value
        if x is None and y is None:
            self._index = 0
            return next(self)
        # Increase index value and return proper pair of values
        else:
            self._index += 1
            return (x, y)

相关问题 更多 >