【问题标题】:list method to group elements in Python在 Python 中对元素进行分组的 list 方法
【发布时间】:2019-07-22 10:11:31
【问题描述】:

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

[("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 时,我将值添加到列表中,并为下一个值创建一个新元素。

【问题讨论】:

  • 我认为您应该先尝试一个解决方案,然后再显示您遇到的问题。

标签: python list group-by tuples itertools


【解决方案1】:

你可以使用itertools.groupby:

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')]

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      【解决方案3】:

      使用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)])
      

      打印:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多