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

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

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

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

Q&A

解決済

3回答

1087閲覧

pythonでの複雑な計算について

22Go

総合スコア55

Python

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

0グッド

0クリップ

投稿2019/03/01 12:03

data

1a bc 100 200 2a de 201 300 3a fg 301 400

このようなdataがあった時、数字と数字の間に空白がある場合、
どのように数字を拾って計算式を組んで行くとよいでしょうか?

bcと100の間の空白を:に変換し、100と200の間の空白を−に変換するといった方法も
考えたのですが、もっと簡単に書けないかと思って質問させて頂きます。

python

1bc:100 2de:99 3fg:99

といった計算結果を出したいです。

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

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

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

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

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

Q71

2019/03/01 12:26

SSV、Space Separated Value なんでしょうが、計算式をどの様に作るのですか?
guest

回答3

0

そんなに複雑な計算ですかね?
この程度であれば、行毎にsplit()の処理でも十分じゃないでしょうか

Python

1with open('data', 'r') as f: 2 for line in f.readlines(): 3 d = line.strip().split() 4 print("{}:{}".format(d[1], int(d[3])-int(d[2])))

投稿2019/03/01 14:14

magichan

総合スコア15898

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

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

22Go

2019/03/03 02:47

ありがとうございます! この計算結果に例えば、100以上のものを別リストにappendにするには どうしたらいいでしょうか?
guest

0

こうした表形式のデータを扱う際は pandas を使いましょう。

python

1from io import StringIO 2import pandas as pd 3 4text = StringIO('''a bc 100 200 5a de 201 300 6a fg 301 400''') 7 8# text は代わりにファイル名でもよいです。 9df = pd.read_csv(text, delim_whitespace=True, header=None) 10diff = df[3] - df[2] 11 12for v in zip(df[1], diff): 13 print('{}:{}'.format(*v))
bc:100 de:99 fg:99

投稿2019/03/01 12:17

編集2019/03/01 12:37
tiitoi

総合スコア21956

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

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

0

ベストアンサー

なるべく少ない行数 (2行) でかいてみました。
eee.py

python3

1with open("data.txt", "r") as f: 2 list(map(lambda v: print("{}:{}".format(*v)), [[v[1], int(v[3]) - int(v[2])] for v in [line.strip().split() for line in f.readlines()]])) 3 4# 上の行を分解してみたもの 5print() 6with open("data.txt", "r") as f: 7 lines = [line.strip().split() for line in f.readlines()] 8 print(lines) 9 data = [[v[1], int(v[3]) - int(v[2])] for v in lines] 10 print(data) 11 strs = ["{}:{}".format(*v) for v in data] 12 print(strs)

実行結果
イメージ説明

後半の処理を分解してかいてみた部分では、次の処理をしています。
a. ファイルを読み込んで、行ごとに単語に切り分ける。
b. 表示に必要なデータへ加工する。
c. 書式を整える。

書式を整えて さらに print するには ここでは、map を使ってみました。
print() で sep="\n" を指定することで各要素が改行されて表示されることを利用するとか、for で各要素毎に print() してもよいです。

投稿2019/03/02 06:56

編集2019/03/02 06:58
katoy

総合スコア22324

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

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

22Go

2019/03/02 14:14

ありがとうごいます。段階に分けていくと分かりやすくなるんですね! 今後も参考にさせて頂きます!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問