从python数组切割偶数/奇数行的最简单方法?
或者,一个更普遍的问题是,如何将一个数组切片得到每一个第n行,因此偶数/偶数你想跳过一行,但是在一般情况下,第n行,跳过n-1行。
假设你正在谈论一个列表 ,你可以在切片中指定步骤(和开始索引)。 语法是list[start:end:step]
。
你可能知道正常的列表访问来获得一个项目,例如l[2]
获得第三个项目。 在两个数字和一个冒号之间,你可以指定一个范围 ,你想从列表中获得。 返回值是另一个列表。 例如l[2:5]
给你第三到第六项。 您还可以传递一个可选的第三个数字,它指定步长。 默认步长是1,这意味着每个项目 (在开始和结束索引之间)。
例:
>>> l = range(10) >>> l[::2] # even - start at the beginning at take every second item [0, 2, 4, 6, 8] >>> l[1::2] # odd - start at second item and take every second item [1, 3, 5, 7, 9]
请参阅Python教程中的列表 。
如果你想得到列表中的每一个第n
个元素(即不包括第一个元素),你就必须像l[(n-1)::n]
一样切片。
例:
>>> l = range(20) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
现在,获得每三个元素将是:
>>> l[2::3] [2, 5, 8, 11, 14, 17]
如果你想包含第一个元素,你只需要l[::n]
。
这对我来说是一个完整的例子;)
>>> import itertools >>> ret = [[1,2], [3,4,5,6], [7], [8,9]] >>> itertools.izip_longest(*ret) >>> [x for x in itertools.chain.from_iterable(tmp) if x is not None] [1, 3, 7, 8, 2, 4, 9, 5, 6]
> map(lambda index: arr[index],filter(lambda x: x%n == 0,range(len(arr))))
其中arr
是一个列表,并且需要n
切片。