拆分Python中的列表元素?

时间:2018-01-30 09:11:57

标签: python group-by

我有一个清单,

['t', 'p', 'k', 'F', 'p', 'l', 'v', 'F']

我希望按“F”对元素进行分组,其中“F”是组的结尾,因此splits将列表分成不同的组。

像这样:

['t', 'p', 'k'] ['p', 'l', 'v']

4 个答案:

答案 0 :(得分:1)

itertools.groupby()key功能一起使用:

from itertools import groupby

l = ['t', 'p', 'k', 'F', 'p', 'l', 'v', 'F']

result = [list(g) for k, g in groupby(l, key=lambda x: x != 'F') if k]
>>> result
[['t', 'p', 'k'], ['p', 'l', 'v']]

另一种方法是使用字符串操作:

result = [list(x) for x in ''.join(l).split('F') if x]
>>> result
[['t', 'p', 'k'], ['p', 'l', 'v']]

请注意,上述两种解决方案都将包含最终'F'后面的所有跟踪项。不确定这是不是你想要的?

答案 1 :(得分:1)

此程序假定您的列表元素始终是单个字符。如果这不是真的,您需要直接在列表上工作。我转换为字符串以使用方便的str.split方法,然后将每个子字符串转换回列表。

inp = ['t', 'p', 'k', 'F', 'p', 'l', 'v', 'F']
print(inp)
groups_as_strings = "".join(inp).split("F")
out = [list(g) for g in groups_as_strings if g]
print(out)

答案 2 :(得分:0)

这是一种方式。

PUB

答案 3 :(得分:0)

简单但易于遵循的解决方案:

new_list = []
tmp_list = []
for i in letter_list:
  if i == 'F':
    if tmp_list:
      new_list.append(tmp_list)
      tmp_list = []
    continue
  tmp_list.append(i)

print(new_list)

请注意,这假定应忽略空列表(连续F),但这很容易删除。