13

リストのリストがあり、それぞれに異なる数の文字列が含まれています。これらすべてを(効率的に)intに変換したいのですが、私の人生でうまくいくことができないので、少し密度が高いと感じています。私は試してきました:newVals = [int(x)for x in [row for rows in values]]

ここで、「values」はリストのリストです。xはリストであるため、int()の場合は引数にできないと言い続けます。明らかに私はここで愚かなことをしています、それは何ですか?この種のことについて受け入れられているイディオムはありますか?

4

6 に答える 6

16

これにより、intがネストされたままになります

[map(int, x) for x in values]

それらを平らにしたいのなら、それも難しいことではありません

Python3の場合map()、イテレータを返します。あなたが使うことができます

[list(map(int, x)) for x in values]

ただし、その場合はネストされたLCを使用することをお勧めします

[[int(y) for y in x] for x in values]
于 2011-06-17T05:24:46.923 に答える
10

どうですか:

>>> a = [['1','2','3'],['4','5','6'],['7','8','9']]
>>> [[int(j) for j in i] for i in a]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
于 2011-06-17T05:24:14.870 に答える
1

間違った順序と括弧を使用するだけです-次のようにする必要があります:

inputVals = [['1','2','3'], ['3','3','2','2']]
[int(x) for row in inputVals for x in row]

または、出力にリストのリストが必要な場合は、次のようにします。

map(lambda row: map(int, row), inputVals)
于 2011-06-17T05:26:29.777 に答える
1

別の回避策

a = [[1, 2, 3], [7, 8, 6]]
list(map(lambda i: list(map(lambda j: j - 1, i)), a))
[[0, 1, 2], [6, 7, 5]] #output
于 2018-03-20T08:22:55.840 に答える
0

醜い方法はevalfを使用することです:

>>> eval(str(a).replace("'",""))
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

1つの配列内のすべての番号を気にしない場合は、次のようになります。

>>> a = [['1','2','3'],['4','5','6'],['7','8','9']]
>>> map(int,sum(a,[]))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
于 2011-06-17T06:43:23.630 に答える
0

リストを任意の数の次元でマップするには、numpy.apply_over_axesを使用できます

import numpy as np
np.apply_over_axes(lambda x,_:x*2, np.array([[1,2,3],[5,2,1]]),[0])
--------------------
array([[ 2,  4,  6],
       [10,  4,  2]])

残念ながら、変数の型も変更する必要がある場合は機能しません。このためのライブラリソリューションが見つからなかったため、これを行うためのコードは次のとおりです。

def map_multi_dimensional_list(l, transform):
    if type(l) == list and len(l) > 0:
        if type(l[0]) != list:
            return [transform(v) for v in l]
        else:
            return [map_multi_dimensional_list(v, transform) for v in l]
    else:
        return []
            
map_multi_dimensional_list([[[1,2,3],[5,2,1]],[[10,20,30],[50,20,10]]], lambda x:x*2)
------------------
[[[2, 4, 6], [10, 4, 2]], [[20, 40, 60], [100, 40, 20]]]
于 2021-06-25T17:05:48.073 に答える