在Python中对元素进行分组的list方法

在Python中对元素进行分组的list方法,python,list,group-by,tuples,itertools,Python,List,Group By,Tuples,Itertools,谢谢你的回答,但我编辑了我的问题,因为它不是所有人都清楚。 我有以下元组列表: [("ok",1),("yes",1),("no",0),("why",1),("some",1),("eat",0),("give",0),("about",0),("tell",1),("ask",0),("be",0)] 我希望: [("ok yes","no"),("why some","eat give about"),("tell","ask be")] 谢谢大家! 因此,我想重新组合所有1,当出现0

谢谢你的回答,但我编辑了我的问题,因为它不是所有人都清楚。 我有以下元组列表:

[("ok",1),("yes",1),("no",0),("why",1),("some",1),("eat",0),("give",0),("about",0),("tell",1),("ask",0),("be",0)]
我希望:

[("ok yes","no"),("why some","eat give about"),("tell","ask be")]
谢谢大家!


因此,我想重新组合所有1,当出现0时,我在列表中添加该值,并为下一个值创建一个新元素。

根据我的理解,以下代码应该适用于上述问题

list_tuples = [("ok",1),("yes",1),("no",0),("why",1),("some",1),("eat",0)]

tups=[]
updated_list=[]
for elem in list_tuples:
        if elem[1] == 0:
                updated_list.append(tuple([' '.join(tups), elem[0]]))
                tups=[]
        else:
                tups.append(elem[0])

print updated_list

一种可能的解决方案是使用
itertools.groupby

from operator import itemgetter
from itertools import groupby

lst = [("ok",1), ("yes",1), ("no",0), ("why",1), ("some",1), ("eat",0)]

def generate(lst):
    rv = []
    for v, g in groupby(lst, itemgetter(1)):
        if v:
            rv.append(' '.join(map(itemgetter(0), g)))
        else:
            for i in g:
                rv.append(i[0])
                yield tuple(rv)
                rv = []
    # yield last item if==1:
    if v:
        yield tuple(rv)

print([*generate(lst)])
from itertools import groupby
d = [("ok",1),("yes",1),("no",0),("why",1),("some",1),("eat",0),("give",0),("about",0),("tell",1),("ask",0),("be",0)]
new_d = [' '.join(j for j, _ in b) for _, b in groupby(d, key=lambda x:x[-1])]
result = [(new_d[i], new_d[i+1]) for i in range(0, len(new_d), 2)]
印刷品:

[('ok yes', 'no'), ('why some', 'eat')]

您可以使用
itertools.groupby

from operator import itemgetter
from itertools import groupby

lst = [("ok",1), ("yes",1), ("no",0), ("why",1), ("some",1), ("eat",0)]

def generate(lst):
    rv = []
    for v, g in groupby(lst, itemgetter(1)):
        if v:
            rv.append(' '.join(map(itemgetter(0), g)))
        else:
            for i in g:
                rv.append(i[0])
                yield tuple(rv)
                rv = []
    # yield last item if==1:
    if v:
        yield tuple(rv)

print([*generate(lst)])
from itertools import groupby
d = [("ok",1),("yes",1),("no",0),("why",1),("some",1),("eat",0),("give",0),("about",0),("tell",1),("ask",0),("be",0)]
new_d = [' '.join(j for j, _ in b) for _, b in groupby(d, key=lambda x:x[-1])]
result = [(new_d[i], new_d[i+1]) for i in range(0, len(new_d), 2)]
输出:

[('ok yes', 'no'), ('why some', 'eat give about'), ('tell', 'ask be')]

我认为你应该先尝试一个解决方案,然后指出你的困境。