乐趣区

关于python:Python代码阅读第50篇对列表间隔取元素

Python 代码浏览合集介绍:为什么不举荐 Python 初学者间接看我的项目源码

本篇浏览的代码实现了在一个列表中每距离 n 个数取一个元素的性能。

本篇浏览的代码片段来自于 30-seconds-of-python。

every_nth

def every_nth(lst, nth):
  return lst[nth - 1::nth]

# EXAMPLES
print(every_nth([1, 2, 3, 4, 5, 6], 2)) # [2, 4, 6]

every_nth函数接管一个列表和距离数nth,返回列表的取值后果。

函数应用列表切片的形式,获取原列表每距离 nth 个元素取值的后果。

s[i:j:k]的模式是 sij 步长为 k 的切片。sij步长为 k 的切片被定义为所有满足 0 <= n < (j-i)/k 的索引号 x = i + n*k 的项组成的序列。换句话说,索引号为 i,i+k,i+2*k,i+3*k,以此类推,当达到j 时进行 (但肯定不包含 j)。当k 为正值时,ij 会被减至不大于 len(s)。当k 为负值时,ij 会被减至不大于 len(s) - 1。如果ij被省略或为 None,它们会定义为列表一端能够达到的“终止”值 (是哪一端的终止值则取决于k 的符号)。请留神,k不可为零。如果 k 为None,则当作1 解决。

因为列表的索引是从 0 开始的,所以第一个被取出的数的索引是 nth-1。因为j 被省略,所以会始终计算到列表的末端。咱们应用一个不那么“恰好”的例子看一下:

>>> every_nth([1, 2, 3, 4, 5, 6, 7], 2) # [2, 4, 6]
[2, 4, 6]
退出移动版