web-dev-qa-db-ja.com

スペースで区切られた数字の文字列を整数に分割する方法は?

文字列"42 0"(たとえば)があり、2つの整数の配列を取得する必要があります。スペースで.splitを実行できますか?

45
Jonathan

OPが インタープリター でテストすることで簡単に自分自身に答えることができる質問に対して、6つの答えはほとんど十分ではありません。

_>>> "42 0".split()  # or .split(" ")
['42', '0']
_

A:はい。

ただし、splitメソッドがデフォルトで空白(スペース、タブ、 キャリッジリターンand改行 )引数を指定しない場合。

_>>> " \r  42\n\r \t\n   \r0\n\r\n".split()
['42', '0']
_

また、mapintfloatなどのイテレート可能アイテムを組み込みに変換する場合、リスト内包表記を使用するよりもstrを使用する方が通常はきれいに見えますなど。Python 2:

_>>> map(int, "42 0".split())
[42, 0]
_

Python 3、mapは遅延オブジェクトを返します。list()でリストに入れるか、forループの例:

_>>> map(int, "42 0".split())
<map object at 0x7f92e07f8940>
>>> list(map(int, "42 0".split()))
[42, 0]
_
90
text = "42 0"
nums = [int(n) for n in text.split()]
54
kindall
l = (int(x) for x in s.split())

常に2つの整数があることが確実な場合は、次のこともできます。

a,b = (int(x) for x in s.split())

または後に配列を変更する予定がある場合

l = [int(x) for x in s.split()]
11
GWW

これは動作するはずです:

[ int(x) for x in "40 1".split(" ") ]
7
Bruno

もちろんsplitを呼び出すことはできますが、整数ではなく文字列を返します。行う

>>> x, y = "42 0".split()
>>> [int(x), int(y)]
[42, 0]

または

[int(x) for x in "42 0".split()]
4
Fred Foo

python 3。

some_string = "2 3 8 61 "

list(map(int, some_string.strip().split()))
3
livelifelively

他の回答では、 split() を使用して値を list に変換できることを既に示しています。 Pythonの arrays について尋ねていた場合、1つの解決策があります。

import array
s = '42 0'
a = array.array('i')
for n in s.split():
    a.append(int(n))

編集:より簡潔なソリューション:

import array
s = '42 0'
a = array.array('i', (int(t) for t in s.split()))
3
GreenMatt

部分文字列が数字かどうかを確認することをお勧めします。

In [1]: [int(i) for i in '1 2 3a'.split() if i.isdigit()]
Out[1]: [1, 2]
2
Dos

指定:text = "42 0"

import re
numlist = re.findall('\d+',text)

print(numlist)

['42', '0']
1
Larry Bunch

strip()を使用して、空のスペースを削除し、変数に明示的なint変換を適用するだけです。

例:

a='1  ,  2, 4 ,6 '
f=[int(i.strip()) for i in a]
0
abhi