質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

570閲覧

pythonでのList型の変化について

bainary

総合スコア58

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/26 12:45

編集2021/04/26 13:05

下記のデータからList型へ変換を行いたいが上手く行かない状態です。
何か案があればご教授お願いします。

python

1実行で使用したいList型 2 p = [ 3 (0.1,0.1), 4 (0.1,0.1), 5 (0.1,0.1), 6 (0.1,0.1), 7 (0.1,0.1), 8 (0.1,0.1), 9 ]

python

1受け取っているデータ 2list = "(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)"

python

1受け取っているデータを加工 2rep_List = list(list.split('#'))

python

1受け取ったデータをListへ加工すると下記のデータになる 2p = [ 3'(0.1,0.1)', 4 '(0.1,0.1)', 5 '(0.1,0.1)', 6 '(0.1,0.1)', 7 '(0.1,0.1)' 8]

上記のシングルクオーテーションを消してList化を行いたいのですが上手く行きません。
実行したコード

python

1list_replace = [item.replace("'", '') for item in p]

結果

python

1list_replace = [ 2'(0.1,0.1)', 3 '(0.1,0.1)', 4 '(0.1,0.1)', 5 '(0.1,0.1)', 6 '(0.1,0.1)' 7]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/04/26 12:53

「受け取ったデータをListへ加工すると下記のデータになる」とありますが、「受け取ったデータ」とは何でしょうか? その部分のコードも掲載できませんか?
bainary

2021/04/26 13:05

修正を行いました。
rtazaki

2021/04/26 13:28

オリジナルデータがすべて0.1だと、期待する動作かどうかがわからないので、 できれば質問者が0.1...ではなく0.1,0.2..など入力データを工夫して質問してもらえたほうが親切だと思います。 (入力が何で、期待する動作が何かがわからないと、回答者が困ってしまいます。)
guest

回答3

0

1行で書くとこういう感じです。

python

1>>> input = "(0.1,0.2)#(0.3,0.4,0.5)#(0.6,0.7,0,8,0.9)" 2>>> output = [[float(t) for t in s[1:-1].split(',')] for s in input.split('#')] 3>>> print(output) 4[[0.1, 0.2], [0.3, 0.4, 0.5], [0.6, 0.7, 0.0, 8.0, 0.9]]

あと、注意事項ですが、

list = "(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)"

というようにlistを変数名として使うのはやめておいた方が良いでしょう。

python

1>>> list = "(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)" 2>>> rep_List = list(list.split('#')) 3Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5TypeError: 'str' object is not callable

というようなエラーの原因になります。

投稿2021/04/26 16:34

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

僕も受け取ったデータがどんなもので、どのようにしたらそのデータになるのか知りたいですが、とりあえず、現状のデータの変換の方法。

そもそもリストの要素は文字列なので、「'」を取り除けば望むものになるわけではありません。
その文字列から、数値部分を取り出して、数値(float)として解釈してあげる必要があります。

その1: 正直にやるとこんな感じかな

python

1new_p = [] 2for l in p: 3 l = l.replace('(', '') 4 l = l.replace(')', '') 5 l = l.split(',') 6 l = tuple(map(float, l)) 7 new_p.append(l) 8 9print(new_p)

見てのとおり、()を外して、カンマ(,)で分割して小数として読み込んでタプルに変換してリストに入れるということをしています。

すごく面倒です。

その2: お勧めではない。

文字列がタプルの形をしているので、そのまま読み込ませることも可能。
※ 元データに変なものが入っていると危険

python

1new_p = [] 2for l in p: 3 a = eval(l) 4 new_p.append(a) 5 6print(new_p)

元ネタが出たので別解を。

python

1import re 2 3input_str = "(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)" 4 5touple_list = re.findall('(([\d.]+),([\d.]+))', input_str) 6res_list = [(float(x), float(y)) for x, y in touple_list] 7 8print(res_list) 9

文字列から小数の2タプルを探してきて、内包表記で数値に変換

投稿2021/04/26 13:07

編集2021/04/26 13:49
TakaiY

総合スコア12825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2021/04/26 13:15 編集

その1について、両サイドの丸括弧を除去するのは l.strip('()') にした方が意味的にも行数的にも良いんじゃないかなと思いました。
bsdfan

2021/04/26 13:42

evalの代わりにast.literal_evalを使うと、多少安全になりそうです。
TakaiY

2021/04/26 13:50

お二人ともいいアドバイスありがとうございます。
guest

0

リスト型への変換は追記された方法で実現できているため、あとはただの文字列を
タプルとして扱えれば何とかなると思いますので、サンプルを記載します。

python

1# original_data = "(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)#(0.1,0.1)" 2original_data = "(0.1,0.2)#(0.3,0.4)#(0.5,0.6)#(0.7,0.8)#(0.9,1.0)" 3p = list(original_data.split('#')) 4 5for s in p: 6 # evalで文字列→タプルに戻してやる。 7 x, y = eval(s) 8 print(x, y)

[結果]

text

10.1 0.2 20.3 0.4 30.5 0.6 40.7 0.8 50.9 1.0

投稿2021/04/26 13:26

rtazaki

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問