【问题标题】:Split lists and tuples in PythonPython中的拆分列表和元组
【发布时间】:2020-05-12 07:01:59
【问题描述】:

我有一个简单的问题。

我有一个列表或一个元组,我想将它拆分成多个包含相同元素的列表(或元组)。

我会试着用一个例子更清楚:

(1,1,2,2,3,3,4) --> (1,1),(2,2),(3,3),(4,)

(1,2,3,3,3,3) --> (1,),(2,),(3,3,3,3)

[2,2,3,3,2,3] --> [2,2],[3,3],[2],[3]

我该怎么办?我知道元组和列表没有“拆分”属性,所以我认为我可以将它们转换为字符串。这是我尝试过的:

def splitt(l)
    x=str(l)
    for i in range (len(x)-1):
        if x[i]!=x[i+1]:
            x.split()
    return x

【问题讨论】:

标签: python python-3.x list for-loop tuples


【解决方案1】:

你可以使用 groupby。

import itertools as it

[list(grp) if isinstance(t,list) else tuple(grp) for k, grp in it.groupby(t)]

例子:

>>> t = (1,2,3,3,3,3) 
[(1,), (2,), (3, 3, 3, 3)]

>>> t = [2,2,3,3,2,3]
[[2, 2], [3, 3], [2], [3]]

【讨论】:

    【解决方案2】:

    你也可以试试 for-loop:

    def group_lt(list_or_tuple):
        result = []
        for x in list_or_tuple:
            if not result or result[-1][0] != x:
                result.append(type(list_or_tuple)([x]))
            else:
                result[-1] += type(list_or_tuple)([x])
        return result
    
    t = (1,1,2,2,3,3,4)
    print(group_lt(t))  # [(1,1),(2,2),(3,3),(4,)]
    
    l = [2,2,3,3,2,3]    
    print(group_lt(l))  # [[2,2],[3,3],[2],[3]]
    

    【讨论】:

      【解决方案3】:

      试试这个

      from itertools import groupby
      
      input_list = [1, 1, 2, 4, 6, 6, 7]
      output = [list(g) for k, g in groupby(input_list)]
      

      【讨论】:

      • 你为什么要map(int, ...)在群里?这些值已经是整数。
      猜你喜欢
      • 1970-01-01
      • 2014-04-27
      • 2019-11-24
      • 2013-12-28
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多