Aou*_*000 4 python zip functional-programming list-comprehension python-itertools
这是我有两个列表的故事:
list_one=[1,2,9,9,9,3,4,9,9,9,9,2]
list_two=["A","B","C","D","A","E","F","G","H","Word1","Word2"]
Run Code Online (Sandbox Code Playgroud)
我想在list_one中找到连续9的指示,以便我可以从list_two获取相应的字符串,我试过:
group_list_one= [(k, sum(1 for i in g),pdn.index(k)) for k,g in groupby(list_one)]
Run Code Online (Sandbox Code Playgroud)
我希望得到每个元组中前9个的索引,然后尝试从那里开始,但那不起作用..
我能在这做什么?PS:我看过itertools的文档,但对我来说似乎很模糊..提前感谢
编辑:预期的输出是(键,出现,index_of_first_occurance)类似的东西
[(9, 3, 2), (9, 4, 7)]
Run Code Online (Sandbox Code Playgroud)
根据您的预期输出判断,尝试一下:
from itertools import groupby
list_one=[1,2,9,9,9,3,4,9,9,9,9,2]
list_two=["A","B","C","D","A","E","F","G","H","Word1","Word2"]
data = zip(list_one, list_two)
i = 0
out = []
for key, group in groupby(data, lambda x: x[0]):
number, word = next(group)
elems = len(list(group)) + 1
if number == 9 and elems > 1:
out.append((key, elems, i))
i += elems
print out
Run Code Online (Sandbox Code Playgroud)
输出:
[(9, 3, 2), (9, 4, 7)]
Run Code Online (Sandbox Code Playgroud)
但如果你真的想要这样的输出:
[(9, 3, 'C'), (9, 4, 'G')]
Run Code Online (Sandbox Code Playgroud)
那么看看这个片段:
from itertools import groupby
list_one=[1,2,9,9,9,3,4,9,9,9,9,2]
list_two=["A","B","C","D","A","E","F","G","H","Word1","Word2"]
data = zip(list_one, list_two)
out = []
for key, group in groupby(data, lambda x: x[0]):
number, word = next(group)
elems = len(list(group)) + 1
if number == 9 and elems > 1:
out.append((key, elems, word))
print out
Run Code Online (Sandbox Code Playgroud)