Python中数组的匹配长度

2024-04-18 22:34:07 发布

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

在线上有一些示例如何从较长数组中减去值,使其与较短数组(example)的长度相匹配。但是,较长数组中的值顺序会发生变化。有没有办法从较长数组的末尾减去值

这就是我想要实现的目标:

a = [1, 2, 3, 4, 5]
b = [1, 5, 8, 2, 7, 3, 5, 9, 4, 10]

一些代码

输出:

a = [1, 2, 3, 4, 5]
b = [1, 5, 8, 2, 7]

Tags: 代码示例目标顺序example数组末尾办法
3条回答

无论阵列的大小或顺序如何,这都应该有效:

a = [1, 2, 3, 4, 5]
b = [1, 5, 8, 2, 7, 3, 5, 9, 4, 10]

m = min(len(a), len(b))
a = a[:m]
b = b[:m]

只需获取从索引0到len(a)-1的列表片段:

b = b[:len(a)]

输出:

>>> a = [1, 2, 3, 4, 5]
>>> b = [1, 5, 8, 2, 7, 3, 5, 9, 4, 10]
>>> b = b[:len(a)]
>>> b
[1, 5, 8, 2, 7]

如果a大于b

>>> a = [1, 5, 8, 2, 7, 3, 5, 9, 4, 10]
>>> b = [1, 2, 3, 4, 5]
>>> b = b[:len(a)]
>>> b
[1, 2, 3, 4, 5]

请注意,如果切片的结束索引大于列表的大小,则不会出现错误

因此,如果您不知道较短的数组是什么,只需在两个数组上执行切片:

b = b[:len(a)]
a = a[:len(b)]

只有较大的一个会被“缩短”

将任意数量的列表剪成等长:

def even_length(*args):
    target_size = min(map(len, args))
    return tuple(l[:target_size] for l in args)

用法:

a = [1, 2, 3, 4, 5]
b = [1, 5, 8, 2, 7, 3, 5, 9, 4, 10]

a, b = even_length(a, b)
print(a, b)

当然,如果处理单个列表变得不方便,您也可以传递listtuple个列表

lists = (a, b, c, d)
lists = even_length(*lists)

相关问题 更多 >