我的列表输入为li = ['a',3,4,'b',6,'c',5,1]
,我希望输出列表为li = ['a',34,'b',6,'c',51]
。
答案 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 :(得分: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}}