0

['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153'] 上記のリストを使用して、要素を int に変換したいのですが、使用[int(x) for x in mylist]するだけでは機能しないことがわかっています。だから私の質問は、私が持っているリストをどのようにintのリストに変えるのですか?

4

5 に答える 5

3
>>> 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]
于 2013-04-05T11:39:23.350 に答える
2

最初にテキストを分割してから、int変換します。

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

Python 3 の場合、 wheremap()はリストではなくジェネレーターを返します。リスト内包表記をネストできます。

[[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]
于 2013-04-05T11:38:58.327 に答える
1

このように試すことができます。

>>> 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]
于 2013-04-05T11:46:58.077 に答える
1

私はネストされたリスト内包表記を避けるためにかなりの時間を費やす傾向があるので (順序を思い出せません)、次のようにします。

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]
于 2013-04-05T11:42:03.733 に答える
0
>>> 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]
于 2013-04-05T11:47:28.230 に答える