【问题标题】:POO - can't get length of iterables as a listPOO - 无法将可迭代的长度作为列表获取
【发布时间】:2021-08-05 12:29:02
【问题描述】:

我的项目:我尝试获取两个可迭代对象并返回一个可迭代对象。

例子:

>>> iters = [i for i in range(5)], [i for i in range(10)]
>>> iters
[[0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
>>> print([i for i in ranges(*iters, mtss=None)])
[(0, 0), (1, 1), ..., (8, None), (9, None)]
>>> print([i for i in ranges(*iters, maximum=False)])
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

这是我的代码:

from typing import Any, Iterable

class ranges(object):
    def __init__(self, __iter1: Iterable, __iter2: Iterable, /, *__iters: Iterable, maximum: bool=True, mtss=None) -> None:
        # mtss -> make them the same size
        lenghts= [len(__iter1), len(__iter2), *[len(i) for i in range(__iters)]]
        self.until: int = (max if maximum else min)(lenghts)
        self.iters: tuple[Iterable] = (__iter1, __iter2, *__iters)
        self.mtss: Any = mtss

    ...

print(ranges([i for i in range(2)], [i for i in range(3)]))

和错误:

Traceback (most recent call last):
  File "c:\Users\areza\Desktop\delta\__init__.py", line 28, in <module>
    print(ranges([i for i in range(2)], [i for i in range(3)]))
  File "c:\Users\areza\Desktop\delta\__init__.py", line 6, in __init__
    lenghts= [len(__iter1), len(__iter2), *[len(i) for i in range(__iters)]]
TypeError: 'tuple' object cannot be interpreted as an integer

如果直到 == 3:

[(0, 0), (1, 1), (2, None)]

我完成了代码,但我无法修复这行代码

【问题讨论】:

  • *__iters 是一个元组,所以range(__iters) 无效。你的意思是写range(len(__iters))

标签: python python-3.x object integer tuples


【解决方案1】:

类型注释对你没有任何帮助,只是让代码更难理解......

双下划线变量名是怎么回事..?!

在这一行

lenghts= [len(__iter1), len(__iter2), *[len(i) for i in range(__iters)]]

问题是

range(__iters)

因为范围需要一个整数,而__iters在这一行中被定义为一个参数元组:

def __init__(self, __iter1, __iter2, /, *__iters, maximum=True, mtss=None):

也许你的意思

range(len(__iters))

?

【讨论】:

  • 我不是这个意思,但谢谢你说我错了
  • 公平地说,这里的 Python 错误消息并不是特别有用,除非你已经知道它为什么出错了 ;-)
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 2022-01-23
  • 2017-10-15
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
相关资源
最近更新 更多