python - 将列表作为嵌套列表,在单独的列表中具有连续元素
问题描述
我想将元素列表分成嵌套列表,每个子列表都有连续的元素。如果一个元素没有连续的元素,它应该在单个列表中。
输入:
l1 = [1, 2, 3, 11, 12, 13, 23, 33, 34, 35, 45]
l2 = [11, 12, 13, 22, 23, 24, 33, 34]
l3 = [1, 2, 3, 11, 12, 13, 32, 33, 34, 45]
预期输出:
l1 = [[1, 2, 3], [11, 12, 13], [23], [33, 34, 35], [45]]
l2 = [[11, 12, 13], [22, 23, 24], [33, 34]]
l3 = [[1, 2, 3], [11, 12, 13], [32, 33, 34], [45]]
我已经尝试了下面的代码,但它没有给出预期的结果,打印一个空列表:
def split_into_list(l):
t = []
for i in range(len(l) - 1):
if abs(l[i] - l[i + 1]) == 0:
t.append(l[i])
elif abs(l[i] - l[i + 1]) != 0 and abs(l[i - 1] - l[i]) == 0:
t.append(l[i])
yield t
split_into_list(l[i:])
if i + 1 == len(l):
t.append(l[i])
yield t
l = [1, 2, 3, 11, 12, 13, 32, 33, 34, 45]
li = []
li.append(split_into_list(l))
for i in li:
print(i, list(i))
解决方案
split_adjacent
使用自定义功能的更短的方法:
def split_adjacent(lst):
res = [[lst[0]]] # start/init with the 1st item/number
for i in range(1, len(lst)):
if lst[i] - res[-1][-1] > 1: # compare current and previous item
res.append([])
res[-1].append(lst[i])
return res
l1 = [1, 2, 3, 11, 12, 13, 23, 33, 34, 35, 45]
l2 = [11, 12, 13, 22, 23, 24, 33, 34]
l3 = [1, 2, 3, 11, 12, 13, 32, 33, 34, 45]
print(split_adjacent(l1))
print(split_adjacent(l2))
print(split_adjacent(l3))
最终输出:
[[1, 2, 3], [11, 12, 13], [23], [33, 34, 35], [45]]
[[11, 12, 13], [22, 23, 24], [33, 34]]
[[1, 2, 3], [11, 12, 13], [32, 33, 34], [45]]
推荐阅读
- r - 在 R 中不使用 iptools 反向跟踪 ip 地址
- python - 带有 2 个日期参数的 argparse
- c# - 发布 WPF 桌面应用程序后无法读取我的项目中的文件
- django - 我正在优化我的 django 项目后端,但是在包含 ForeignKey 的“list_display”上遇到了很多问题
- python - Python 通过请求更改 instagram bio
- python - 如何指定不同的 token_policies 并根据用户在 hashcorp vault 中的输入指定租约期限?
- javascript - 在 reactjs 中将 searchParam 数据从一个组件发送到另一个组件
- rust - Rust actix_web::main “预期 `std::result::Result<(), std::io::Error>` 因为返回类型”但建议的类型不起作用
- flutter - 如何在页面路由中使用颤振抽屉菜单?
- php - GuzzleHttp 错误:调用未定义的方法 GuzzleHttp\Client::sendAsync()