python - 从列表的给定索引中获取邻居数。给定解决方案的最佳实践或有效性能是什么?

标签 python python-3.x list performance

我想从 (a_list) 列表的给定索引 (idx) 中获取 (c=3) 个元素。
输入:

a_list = [1,2,3,4,5,6,7,8,9,10]  
idx = 4  
c = 3        # no of neighbours to take  

输出: [2,3,4,6,7,8]

解决方案 1:通过单独的循环附加前向和后向元素。

def get_result(a_list, idx, c):

  for i in range(1,c+1):
    result.append(a_list[idx - i])

  for i in range(1,c+1):
    result.append(a_list[idx + i])

  return result

解决方案 2:使用一个 for 循环和合并为前向和后向元素创建两个单独的列表。

def get_result(a_list, idx, c):
  forward_list, backward_list = [],[]

  for i in range(1,c+1):
    forward_list.append(a_list[idx - i])
    backward_list.append(a_list[idx + i])

  result = [forward_list, backward_list]
  return result

最佳答案

最好使用切片而不是使用循环来手动构造结果:

def get_result(a_list, idx, c):
    return a_list[idx-c:idx] + a_list[idx+1:idx+c+1]

>>> get_result([1,2,3,4,5,6,7,8,9,10], 4, 3)
[2, 3, 4, 6, 7, 8]

毕竟,您的用例正是切片的用途:提取序列的连续[或至少常规]子序列。

由于 idx-c 可能结果为负,因此您可以添加一些逻辑来涵盖这种情况,例如你可以使用

a_list[max(0, idx-c):idx]

第一个被加数。

关于python - 从列表的给定索引中获取邻居数。给定解决方案的最佳实践或有效性能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59114737/

相关文章:

python - 尝试运行服务器时出现导入错误

list - 一种生成给定长度组合的更快方法,保留顺序

python - 使用 ipython 时在远程 ipengine 上重新加载模块

python - 查找所有使用 `print` 但不包含 `from __future__ import print_function` 的文件

python - argparse 可选子解析器(用于 --version)

python-3.x - 使用 NAT(null) 将日期列从 Pandas 保存到 Parquet

python pandas - 根据包含字符串列表的 B 列更改 A 列中的值

Python:如何将列表拼接成给定长度的子列表?

python - 在 Python 中解析 C 结构

python - python中的redis