Python 如何将整数合并到一个列表中,[';a';,1,2]变成[';a';,12]
我有一个列表输入为Python 如何将整数合并到一个列表中,[';a';,1,2]变成[';a';,12],python,python-3.x,Python,Python 3.x,我有一个列表输入为li=['a',3,4,'b',6,'c',5,1],我希望我的输出列表为li=['a',34,'b',6,'c',51]这里有一种使用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
li=['a',3,4,'b',6,'c',5,1]
,我希望我的输出列表为li=['a',34,'b',6,'c',51]
这里有一种使用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.join(),如果是str,要么将int映射到str,执行str.join()并再次返回int 注意:
lst=['a','b',3,4,'b',6,'c',5,1]#添加一个'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]
进一步阅读: 如果您在理解此解决方案时遇到困难,我想您可以阅读以下内容:
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
使用纯递归:
def shrink(l):
if len(l) <= 1:
return l
if type(l[-1]) == int and type(l[-2]) == int:
l[-2] = int(str(l[-2]) + str(l[-1]))
return shrink(l[:-1])
else:
return shrink(l[:-1]) + [l[-1]]
shrink(lst)
def收缩(l):
如果len(l)到目前为止你尝试了什么?不要说出你的列表list
。它已经被占用了。谢谢你提醒我注意输入错误@AntonvBRYeah,regex是另一个尝试,但是不要忘记转换回整数,否则答案不完整。
def shrink(l):
if len(l) <= 1:
return l
if type(l[-1]) == int and type(l[-2]) == int:
l[-2] = int(str(l[-2]) + str(l[-1]))
return shrink(l[:-1])
else:
return shrink(l[:-1]) + [l[-1]]
shrink(lst)