匹配 Python 中数组的长度

Match length of arrays in Python

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

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

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]

只需获取从索引 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)]

只有大的才会被“缩短”。

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

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]

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

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)