-3

私は文字列 a="2:1,3:2,4:5,7:5" を持っています 私は基本的にこれを分割し、2,3,4,7 を整数リストと 1,2,5,5 に割り当てたいと考えています最初に b=a.split(":") を試し、次に c=b.split(",") を試してみました。21,32 などを取得します。

それで、これを行う方法を提案できますか?

4

3 に答える 3

3

21あなたが使ったと言ったもののように、遠く離れていても、どうやって抜け出すことができるのかわかりません。

しかし、あなたは正しい軌道に乗っています。一歩一歩進んでいきましょう。

>>> a="2:1,3:2,4:5,7:5"
>>> b=a.split(":")
>>> b
['2', '1,3', '2,4', '5,7', '5']

2そうではありません。最初にandを取得し1、次に3andを取得したかったからです2

>>> b=a.split(',')
>>> b
['2:1', '3:2', '4:5', '7:5']

splitでは、その中のそれぞれのことをしたいと思いlistます。どうやってそれを行うのですか?forループを記述したり、 を使用したりすることもできますmapが、リスト内包表記がおそらく最も単純です。

>>> c=[element.split(':') for element in b]
[['2', '1'], ['3', '2'], ['4', '5'], ['7', '5']]

これで 2 つのリストができましたが、圧縮されています。それらをどのように解凍しますか?ジッパーで!

>>> d, e = zip(*c)
>>> d
('2', '3', '4', '7')
>>> e
('1', '2', '5', '5')

これで、あと少しですが、これらを文字列のタプルではなく、整数のリストにしたいとします。レスキューのために、内包表記をもう一度リストします。

>>> f = [int(element) for element in d]
>>> g = [int(element) for element in e]
>>> f
[2, 3, 4, 7]
>>> g
[1, 2, 5, 5]
于 2013-04-18T18:08:43.627 に答える
1
In [8]: a = "2:1,3:2,4:5,7:5"

In [9]: b, c = zip(*[map(int, t.split(':')) for t in a.split(',')])

In [10]: b
Out[10]: (2, 3, 4, 7)

In [11]: c
Out[11]: (1, 2, 5, 5)

ここで、bcはタプルです。必要に応じて、 を呼び出してリストに変換しますlist()

于 2013-04-18T18:08:25.807 に答える
0

次のようなことができます。

>>> a = "2:1,3:2,4:5,7:5"
>>> l1, l2 = zip(*(map(int, p.split(':')) for p in a.split(',')))
>>> l1
(2, 3, 4, 7)
>>> l2
(1, 2, 5, 5)

a.split(',')かなり自明です。map(int, p.split(':')) for p in a.split(',')結果の数値のペアをそれぞれ分割し、整数に変換します。

zip(*(...))そのジェネレータを取り、各ペアの最初の要素を 1 つのリストに入れ、2 番目の要素を別のリストに入れます。

l1, l2 = ...タプルアンパックです。基本的にl1 = ...[0]andの省略形ですl2 = ...[1]


別の方法は次のとおりです。

>>> l = map(int, a.replace(',', ':').split(':'))
>>> l
[2, 1, 3, 2, 4, 5, 7, 5]
>>> l1, l2 = l[::2], l[1::2]

これにより、コンマがコロンに変換され、.split(). l[::2]すべての偶数要素をl[1::2]返し、すべての奇数要素を返します。

于 2013-04-18T18:08:36.000 に答える