带有来自列表的输入的 Python 调用类

标签 python list

我有一个名为 Interval 的类,我想为它从一个间隔列表中创建多个间隔对象。我如何使用 map 做到这一点?

class Interval(object):
    def __init__(self, s=0, e=0):
        self.start = s
        self.end = e

intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]]

我尝试过:

objs = map(Interval, intervals)

但这会将完整间隔作为第一个参数发送,而不是将输入单独发送到类。

最佳答案

您可以使用 starmap来自 itertools:

<b>from itertools import starmap</b>

objs = <b>starmap</b>(Interval,intervals)

请注意 starmap 是惰性工作的(就像 Python-3.x 中的 map 一样)并且您需要具体化它,例如使用 list(. .):

>>> list(objs)
[<__main__.Interval object at 0x7efbf7e82358>, <__main__.Interval object at 0x7efbf7e82390>, <__main__.Interval object at 0x7efbf7e823c8>, <__main__.Interval object at 0x7efbf7e82400>, <__main__.Interval object at 0x7efbf7e82438>]

如果您不想使用 itertools 库,等效项是:

objs = map(<b>lambda x: Interval(*x)</b>,intervals)

据我所知,这就是为什么他们称它为 starmap:因为如果您要使用 lambda 表达式,则带有星号。

关于带有来自列表的输入的 Python 调用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44424003/

相关文章:

python - Cython的cpython.datetime.datetime_new导致段错误

Python字典理解速度很慢

list - 列表中的每个其他字母?语言语言

python - 如何从 csv 文件的两个特定列创建元组列表?

c - 如何随机打乱 C 中的链表

python - 子集和组合不同长度数组的有效方法

python - 如何确定 Python 中对象的大小?

将新键添加到列表字典中的 Pythonic 方法

python - 如何修改 pandas df 以调整系列情节的起点?

list - Pandas 从列表列表中一次添加多个新列