python - python:将列表中的元素组合在一起
问题描述
我目前正在itertools
创建并返回一个列表,其元素是包含原始列表的相等元素的连续运行的列表。
import itertools
it = [1, 1, 5, 5, 5, 'test', 'test', 5]
new = len(it)
for a in range(new):
return [list(k) for a, k in itertools.groupby(it)]
对于上面的例子,结果是:
[[1, 1], [5, 5, 5], ['test', 'test'], [5]]
我可以在不使用的情况下实现这一点itertools
吗?
解决方案
老实说,一个简单的 for 循环就可以完成这项工作,您甚至不必导入itertools
.
最简单的方法是使用这个:
it = [1, 1, 5, 5, 5, 'test', 'test', 5]
result = []
for (i, x) in enumerate(it):
if i < 1 or type(x) != type(it[i - 1]) or x != it[i - 1]:
result.append([x])
else:
result[-1].append(x)
print(result)
或者,以函数形式:
def type_chunk(it):
result = []
for (i, x) in enumerate(it):
if i < 1 or type(x) != type(it[i - 1]) or x != it[i - 1]:
result.append([x])
else:
result[-1].append(x)
return result
然后,您将像这样使用该函数:
print(type_chunk([1, 1, 5, 5, 5, 'test', 'test', 5]))
你甚至可以跳过类型检查,只寻找相等的值:
def type_chunk(it):
result = []
for (i, x) in enumerate(it):
if i < 1 or x != it[i - 1]:
result.append([x])
else:
result[-1].append(x)
return result
祝你好运。
推荐阅读
- css - CSS 转换在 Mozilla 浏览器中不起作用
- kivy - 如何创建高度可调的 KivyMD 卡
- java - 带有 WebClient 的 Cron 调度程序
- php - PHP替换特定字符串后的值
- laravel - 在 laravel 中使用多对多关系同步:PostgreSQL 数据透视表不更新
- c++ - 无法编译包括文件系统的 C++ 程序
- eclipse - Tomcat 9/Eclipse 2020-12:HTTP 状态 404
- python-3.x - 当我使用 linux penguin 在 chromebook 上安装 python 3.9 时,我仍然看到旧版本
- react-native - 在 react native 中单击按钮上的 json 对象生成 CSV 文件
- c++ - 无限循环的编译器优化