我有一个清单,
['t', 'p', 'k', 'F', 'p', 'l', 'v', 'F']
我希望按“F”对元素进行分组,其中“F”是组的结尾,因此splits
将列表分成不同的组。
像这样:
['t', 'p', 'k'] ['p', 'l', 'v']
答案 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),但这很容易删除。