python - 根据索引是否包含在间隔列表中创建零/一列表

标签 python list numpy

我有一个列表列表,每个列表表示一个数字区间:

intervals = [[1, 4],
             [7, 9],
             [13, 18]
             ]

我需要创建一个包含 20 个元素的列表,如果每个元素的索引不包含在任何间隔中,则每个元素为 0,否则为 1。因此,所需的输出是:

output = [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0]

我可以想到使用一些简单的东西,如下所示:

output = zeros(20)
for index, _ in enumerate(output):
    for interval in intervals:
        if interval[0] <= index <= interval[1]:
            output[index] = 1

但是有没有更有效的方法?

最佳答案

与@mozway 的答案基本相同,但没有创建中间数据结构并且可以说更具可读性:

output = np.zeros(N, dtype=int)

for start, end in intervals:
    output[np.arange(start, end+1)] = 1

关于python - 根据索引是否包含在间隔列表中创建零/一列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71411194/

相关文章:

python访问字典中字典中的元素

python - 为多维掩码数组赋值不会清除掩码?

python - 通过 numpy.random.seed 设置的随机种子是否跨子模块维护?

python - 如何 pickle numpy 的 Inf 对象?

Python lxml 自定义解析器不适用于 lxml.etree.parse(...) 函数

python - import surprise 在 python3 中抛出 ContextualVersionConflict 错误

python - 运行两个 python 进程

python - 满足任意长度列表中的条件

python - 为什么不打印字符串 'andy' 请输入新用户名?

Python while循环返回第N个字母