从Python数组中切片奇偶行的最简方式?

94 投票
4 回答
109847 浏览
提问于 2025-04-16 11:46

或者,更一般的问题是,如何从一个数组中提取每隔 n 行的数据。比如说,如果你想要偶数行和奇数行,那就需要跳过一行。但在更一般的情况下,你想要提取每隔 n 行的数据,也就是跳过 n-1 行。

4 个回答

1

这是一个关于我的数组(myArr)中索引为0, 2, 4...的例子

myArr[list(range(0,len(myArr),2))]

这是一个关于我的数组(myArr)中索引为1, 3, 5...的例子

myArr[list(range(1,len(myArr)+1,2))]

你可以根据需要使用步长参数来操作它,在这个例子中,步长等于2。希望这对你有帮助。

1

这主要是为了给我自己提供一个完整的例子;)

>>> 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]
202

假设你在说的是一个 列表,你可以在切片中指定步长(还有起始索引)。语法是 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-th 元素(也就是不包括第一个元素),你需要像这样切片 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]

撰写回答