web-dev-qa-db-ja.com

スペースで区切られた整数の文字列をintのリストに変更します

どうやって作るの?

x = '1 2 3 45 87 65 6 8'

>>> foo(x)
[1,2,3,45,87,65,6,8]

私は完全に立ち往生しています、インデックスでそれを行うと、1桁以上の数字が壊れます。助けてください。

29
Spock

リスト内包表記を 。split() メソッドと組み合わせて使用​​できます。

_x = [int(i) for i in x.split()]
_

または、map aswellを使用することもできます。

_x = list(map(int, x.split()))
_

整数が必要な場合、listintを作成します。

または、単に文字列のリストに.split()を使用します。

_x = x.split()
_

strのリストを作成する場合

40
tijko

python stringをリストに変更するsplit()関数を提供するため、心配する必要はありません。

x='1 2 3 4 67 8 9'
x.split()

['1'、 '2'、 '3'、 '4'、 '67'、 '8']

または整数形式で出力したい場合は、マップ関数を使用できます

map(int ,x.split(' '))

[1、2、3、4、67、8]

4
Shivendra Singh

上記のように、文字列の先頭または末尾にスペースを入力するか、アイテム間に複数の不均等なスペースで区切って入力すると、s.split( '')も空のアイテムを返します。

>>> s=' 1 2  3 4 67 8 9 ' 
>>> list(s.split(' '))
['', '1', '2', '', '3', '4', '67', '8', '9', '']

区切り文字を指定しないようにした方が良いです:

>>> list(s.split())
['1', '2', '3', '4', '67', '8', '9']

オプションの2番目の引数sepが存在しないかNoneの場合、単語は空白文字の任意の文字列(スペース、タブ、改行、リターン、フォームフィード)で区切られます。

スペースでのみ分割する場合は、空の文字列を簡単にフィルタリングできます。

>>> [item for item in s.split(' ') if item]
['1', '2', '3', '4', '67', '8', '9']
3

単純な行は...

print (map(int, x.split()))  

誰かが私を賢く修正したように、python> = 3では、それは

print(list(map(int,x.split())))  

また、以前のバージョンでもユーザーになる可能性があります。

1

明確な説明をするだけです。

文字列をリストに分割する文字列メソッドstr.split()を使用できます。この方法の詳細については、こちらをご覧ください こちら

例:

def foo(x):
    x = x.split() #x is now ['1','2','3','45', ..] the spaces are removed.
    for i, v  in enumerate(x): #Loop through the list
        x[i] = int(v) #convert each element of v to an integer

これでうまくいくはずです!

>>> x
[1, 2, 3, 45, 87, 65, 6, 8]
0
aIKid

入力に数字しかないと仮定すると、次のようになります。

_>>> x = '1 2 3 45 87 65 6 8'
>>> num_x = map(int, filter(None, x.split(' ')))
>>> num_x
[1 2 3 45 87 65 6 8]
_

これは、数字が複数のスペース文字で区切られている場合、または入力の前後にスペース文字がある場合に対処します。次のようなもの:

_>>> x = ' 1 2 3  4 '
>>> num_x = map(int, filter(None, x.split(' ')))
>>> num_x
[1, 2, 3, 4]
_

x.split(' ')への入力を置き換えて、他の区切り文字タイプにも一致させることができます。 _,_または_;_など.

0
6pack kid