文字列で表現されたリストをリストに変換

How should I transform the str type list to list? [duplicate]-StackOverflow

Pythonには抽象構文木を処理する(或いはその補助をする)為のモジュール「ast(Abstract Syntax Tree)」がある.これを使うと構文の評価が簡単に(かつ安全に)できて,

a = '[1, 2, 3, 4]'

‘[1, 2, 3, 4]’

import ast

ast.literal_eval(a)

[1, 2, 3, 4]

勿論,

eval(a)

[1, 2, 3, 4]

ただし,「eval」を用いる場合は以下に留意.

Eval really is dangerous – Ned Batchelder

Pandas.DataFrameの操作でよくある操作(.str.extract(‘([0-9]+)’)だが,正規表現で数値を拾って変換するという考え方も.

import re

ptr = re.compile('([0-9]+)')
[int(i) for i in ptr.findall(a)]

[1, 2, 3, 4]

例えば,

b = '[1, 2, 3, a, 4, b, 5, c, 6]'
ast.literal_eval(b)

ValueError: malformed node or string

eval(b)

NameError: name ‘c’ is not defined

[int(i) for i in ptr.findall(b)]

[1, 2, 3, 4, 5, 6]

converting a list to integer on python-StackOverflow

a = [
    ['39', '40', '39', '38', '35', '38', '39', '39', '42', '37', '40', '41', '37', '39', '39', '40', '38', '40', '39', '40'],
    ['39', '40', '39', '38', '36', '39', '40', '39', '42', '38', '40', '41', '38', '39', '39', '40', '38', '40', '39', '41'],
    ['39', '40', '40', '38', '36', '39', '40', '39', '43', '38', '40', '41', '38', '39', '39', '40', '38', '40', '39', '41']
]
[[int(elm) for elm in sublist] for sublist in a]

[[39,
40,
39,
38,
35,
38,
39,
39,
42,
37,
40,
41,
37,
39,
39,
40,
38,
40,
39,
40],
[39,
40,
39,
38,
36,
39,
40,
39,
42,
38,
40,
41,
38,
39,
39,
40,
38,
40,
39,
41],
[39,
40,
40,
38,
36,
39,
40,
39,
43,
38,
40,
41,
38,
39,
39,
40,
38,
40,
39,
41]]

%timeit [[int(elm) for elm in sublist] for sublist in a]
%timeit [list(map(int, sublist)) for sublist in a]

22.6 µs ± 1.92 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
19.2 µs ± 371 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

広告
カテゴリー: 未分類 パーマリンク

文字列で表現されたリストをリストに変換 への2件のフィードバック

  1. ピンバック: 抽象構文木 | 粉末@それは風のように (日記)

  2. ピンバック: リスト形式の文字列をリストに変換 | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中