当前位置: 首页 > article >正文

python如何去除列表末尾的None

在 Python 中,你可以使用列表切片或者列表推导式等方法来去除列表末尾的 None 值。这里有几个方法可以实现这个目的:

方法一:使用列表切片和 rstrip 方法(针对字符串列表的模拟,但需要先转换)

虽然 rstrip 方法是针对字符串的,但我们可以将列表转换为字符串处理后再转换回来(不推荐,仅作示例)。更实际的方法见下方。

# 不推荐的方法,仅作示例理解
lst = [None, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, None, None, None, None]
str_lst = '\0'.join(map(str, lst))  # 用 \0 作为分隔符
cleaned_str_lst = str_lst.rstrip('\0None').split('\0')  # 去除末尾的 'None'
cleaned_lst = [None if x == '' else int(x) for x in cleaned_str_lst]  # 转回列表并处理空字符串
print(cleaned_lst)

方法二:使用列表推导式和 enumerate

通过 enumerate 获取每个元素的索引,然后从后往前遍历,找到第一个不是 None 的元素位置,然后切片。

lst = [None, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, None, None, None, None]

# 从后往前找到第一个不是 None 的索引
last_non_none_idx = next((i for i, x in enumerate(reversed(lst)) if x is not None), -1)
last_non_none_idx = len(lst) - 1 - last_non_none_idx  # 转换为正向索引

# 切片
cleaned_lst = lst[:last_non_none_idx + 1]
print(cleaned_lst)

方法三:直接使用 while 循环

从列表末尾开始遍历,找到第一个不是 None 的元素位置,然后切片。

lst = [None, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, None, None, None, None]

# 从后往前找到第一个不是 None 的索引
i = len(lst) - 1
while i >= 0 and lst[i] is None:
    i -= 1

# 切片
cleaned_lst = lst[:i + 1]
print(cleaned_lst)

方法四:列表推导式(简洁但不高效,适用于小列表)

这种方法虽然简洁,但在大数据集上可能效率不高,因为它会遍历整个列表多次(如果末尾有很多 None)。

lst = [None, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, None, None, None, None]

# 列表推导式,只保留前面的元素直到遇到第一个末尾的 None
cleaned_lst = [x for x in lst if x is not None and (lst[lst.index(x):].count(None) < lst[lst.index(x)+1:].count(None) if x != lst[-1] else True)]

# 但是上面的方法有点复杂且不直观,我们可以简化一下,先收集不是 None 的元素,再反转回来(不推荐用于大数据集)
cleaned_lst = []
for x in reversed(lst):
    if x is not None:
        cleaned_lst.append(x)
        break
cleaned_lst.extend(reversed([x for x in reversed(lst) if x is not None and x not in cleaned_lst]))
cleaned_lst.reverse()  # 因为我们是反转处理的,所以最后再反转回来

print(cleaned_lst)

推荐方法:方法二或方法三,因为它们既直观又高效。方法四虽然简洁但在大数据集上效率不高。


http://www.kler.cn/a/562154.html

相关文章:

  • Nmap网络安全审计
  • 超多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维路径规划,MATLAB代码
  • https和http有什么区别
  • kotlin 知识点 七 泛型的高级特性
  • 【gitlab】认识 持续集成与部署
  • Java 值传递
  • python实现基于文心一言大模型的sql小工具
  • Unity Shader Graph 2D - Procedural程序化图形循环加载进度效果
  • 从零开始:使用PyTorch构建DeepSeek R1模型及其训练详解
  • 【愚公系列】《Python网络爬虫从入门到精通》034-DataFrame简单数据计算整理
  • PHP入门基础学习五(函数1)
  • 模型参数量与显存占用分析
  • 陀螺匠·企业助手v1.8 产品介绍
  • 无人系统:未来技术的自动化与智能化应用
  • 格行物联网代理项目技术解析:三网切换与AI识别如何赋能轻资产创业?格行随身WiFi和视精灵代理靠谱吗?格行乡村万店计划可行性深度分析!低成本的小生意有哪些?
  • angular贪吃蛇
  • mysql 迁移到人大金仓数据库
  • MySQL 面试
  • Plumelog与ELK集成Springboot
  • 探索Grover算法的原理及其实际应用