如何将列表中的整数加在一起,使得:['a',1,2]变为['a',12]

时间:2018-05-06 19:32:39

标签: python python-3.x

我的列表输入为li = ['a',3,4,'b',6,'c',5,1],我希望输出列表为li = ['a',34,'b',6,'c',51]

3 个答案:

答案 0 :(得分:3)

这是使用groupby和检查项目类型的一种方法。

from itertools import groupby

lst = ['a',3,4,'b',6,'c',5,1]

nlst = [''.join(i) if c == str else int(''.join(map(str,i))) 
            for c, i in groupby(lst, key=type)]

print(nlst)

返回:

['a', 34, 'b', 6, 'c', 51]

简短说明

groupby将创建这些项目(列表实际上是作为生成器返回的,但现在这并不重要)

[(str, ['a']),
 (int, [3, 4]),
 (str, ['b']),
 (int, [6]),
 (str, ['c']),
 (int, [5, 1])]

然后我们执行str.join()如果str或我们将int映射到str,执行str.join()并再次返回int for int。

注意:lst = ['a','b',3,4,'b',6,'c',5,1] # added a 'b'将返回:

['ab', 34, 'b', 6, 'c', 51]

如果这不合适,你可以重写这个功能,这甚至可以让你更容易理解:

lst = ['a','b',3,4,'b',6,'c',5,1]
nlst = []

for c, i in groupby(lst, key=type):
    if c == int:
        nlst.append(int(''.join(map(str,i))))
    elif c == str:
        nlst.extend(i)
    # If type is not int or str, we skip!
    else:
        pass

print(nlst)

返回:

['a', 'b', 34, 'b', 6, 'c', 51]

进一步阅读:

如果您无法理解此解决方案,我会说您可以阅读更多有关:

的信息
  1. Python str.join()连接字符串
  2. Python地图从一种类型转换为另一种类型
  3. Python类型str,int,list ..
  4. 列表理解紧凑的循环[i for i in list]
  5. Itertools groupby(这里的关键功能)

答案 1 :(得分:1)

您也可以使用re:

import re

list_ = ['a',3,4,'b',6,'c',5,1]

x = re.split('(\d+)',''.join(str(i) for i in list_))

list_ = [int(i) if i.isdigit() else i for i in x if i] # removing empty values and get correct formatting 

答案 2 :(得分:0)

使用纯递归:

{{1}}