首页 > 解决方案 > 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吗?

标签: pythonpython-3.x

解决方案


老实说,一个简单的 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

祝你好运。


推荐阅读