私は文字列 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 などを取得します。
それで、これを行う方法を提案できますか?
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
、次に3
andを取得したかったからです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]
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)
ここで、b
とc
はタプルです。必要に応じて、 を呼び出してリストに変換しますlist()
。
次のようなことができます。
>>> 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]
返し、すべての奇数要素を返します。