2

これは非常に簡単なはずだと思いますが、より良い方法で書く方法が本当にわかりません。ご存知でしたら教えてください

#there are some points in text files and was read into a list
s = ['3,4','4,5','6,5','7,8']
#break s element to (x,y) form every element should convert to number type
points = [] 
for pStr in s:
    ss = pStr.split(',')
    points.append([int(p) for p in ss])
print(points) #[[3, 4], [4, 5], [6, 5], [7, 8]]

1行で書いたほうがいい

4

3 に答える 3

6

リスト内包表記を使用する:

In [19]: s = ['3,4','4,5','6,5','7,8']

In [21]: [[int(y) for y in x.split(',')] for x in s]
Out[21]: [[3, 4], [4, 5], [6, 5], [7, 8]]
于 2012-09-14T12:44:57.910 に答える
5

Python 2.x を使用している場合は、次のことができます。

points = [map(int, x.split(',')) for x in s]

Python 3.x を使用している場合は、イテレータを返すため、map() の結果を list() に渡す必要があります。

points = [list(map(int, x.split(','))) for x in s]

実際に:

>>> s = ['3,4','4,5','6,5','7,8']
>>> points = [map(int, x.split(',')) for x in s]
>>> print(points)
[[3, 4], [4, 5], [6, 5], [7, 8]]
于 2012-09-14T12:42:10.290 に答える
1
>>> s = ['3,4','4,5','6,5','7,8']
>>> from ast import literal_eval
>>> [literal_eval(x) for x in s]
[(3, 4), (4, 5), (6, 5), (7, 8)]

リストのリストが本当に必要な場合

>>> [list(literal_eval(x)) for x in s]
[[3, 4], [4, 5], [6, 5], [7, 8]]
于 2012-09-14T12:55:47.377 に答える