整数字符串列表 ['123 121','42 23','23 23']



['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153']在上面的列表中,我想将元素转换为整型,我知道仅使用[int(x) for x in mylist]是行不通的。我的问题是如何将列表转换成整型列表

>>> L = ['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153']
>>> [int(y) for x in L for y in x.split()]
[136, 145, 136, 149, 137, 145, 138, 145, 139, 145, 142, 149, 142, 153, 145, 153]

先分割文本,然后转换为int:

[map(int, elem.split()) for elem in originallist]

对于Python 3,其中map()返回一个生成器,而不是一个列表,您可以嵌套列表推导式:

[[int(n) for n in elem.split()] for elem in originallist]

在Python 2下也能很好地工作。

快速演示:

>>> originallist = ['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153']
>>> [[int(n) for n in elem.split()] for elem in originallist]
[[136, 145], [136, 149], [137, 145], [138, 145], [139, 145], [142, 149], [142, 153], [145, 153]]

您可以通过将elem.split()循环移动到外部列表推导式的末尾来删除嵌套:

[int(n) for elem in originallist for n in elem.split()]
给了

:

[136, 145, 136, 149, 137, 145, 138, 145, 139, 145, 142, 149, 142, 153, 145, 153]

由于我倾向于尽量避免嵌套列表推导式(我永远记不得顺序),所以我会这样做:

from itertools import chain
x = ['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153']
gen = chain.from_iterable(elem.split() for elem in x)
integers = [int(elem) for elem in gen]

你可以这样尝试,

>>> import re
>>> l=['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153']    
>>> map(int, re.findall(r'd+',' '.join(l)))
[136, 145, 136, 149, 137, 145, 138, 145, 139, 145, 142, 149, 142, 153, 145, 153]
>>> L = ['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153']
>>> map(int, ' '.join(L).split())
[136, 145, 136, 149, 137, 145, 138, 145, 139, 145, 142, 149, 142, 153, 145, 153]

最新更新