Zash
@Zash

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Python】リストの要素を分解したい

【Python】リストの要素を分解したい

いま、Pythonでリストxが以下のように定義されていると仮定します。(Before)
このリストxの1つ1つの要素を、エスケープシーケンスが現れるごとに要素を分解し新たなリストを作成するにはどうすればいいでしょうか。(After)

Before

x=['0.01\t0.02\t0.03\n','0.04\t0.05\t0.06\n','0.07\t0.08\t0.09\n'] 

After

x=['0.01','\t','0.02','\t','0.03','\n','0.04','\t','0.05','\t','0.06','\n','0.07','\t','0.08','\t','0.09','\n']
0

3Answer

質問1

この場合、下記のようなサンプルスクリプトはいかがでしょうか。

サンプル

x=['1\t2\t3\n','4\t5\t6\n','7\t8\t9\n']
res = sum([list(e) for e in x], [])
print(res)

出力

['1', '\t', '2', '\t', '3', '\n', '4', '\t', '5', '\t', '6', '\n', '7', '\t', '8', '\t', '9', '\n']

注意

質問のx=['1\t2\t3\n','4\t5\t6\n,'7\t8\t9\n']では、'4\t5\t6\nについて、'で囲まれていないようですのでご注意ください。

質問2

サンプル

import re
x=['0.01\t0.02\t0.03\n','0.04\t0.05\t0.06\n','0.07\t0.08\t0.09\n'] 
res = sum([f.split(',') for f in [re.sub('(\t|\n)', ',\\1,', e)[:-1] for e in x]], [])
print(res)

出力

['0.01', '\t', '0.02', '\t', '0.03', '\n', '0.04', '\t', '0.05', '\t', '0.06', '\n', '0.07', '\t', '0.08', '\t', '0.09', '\n']

もっとスマートな方法があるかもしれません。

0Like

Comments

  1. @Zash

    Questioner

    ご回答ありがとうございました。
    質問内容に不備がありました。
    リストの要素にint型のデータが含まれていましたが、float型のデータに訂正します。
    大変恐縮ではございますが、お時間のある時に再度回答していただけないでしょうか。
    よろしくお願い致します。

もう回答付いていますが、面白そうだったので別解を。

import re
x = ['0.01\t0.02\t0.03\n', '0.04\t0.05\t0.06\n', '0.07\t0.08\t0.09\n']
x = list(filter(None, re.split('(\s)', ''.join(x))))
print(x)
# ['0.01', '\t', '0.02', '\t', '0.03', '\n', '0.04', '\t', '0.05', '\t', '0.06', '\n', '0.07', '\t', '0.08', '\t', '0.09', '\n']

半角スペースが入ってるとそこでも区切られてしまうのですが、見ないフリ:rolling_eyes:

0Like
import re
x = ['0.01\t0.02\t0.03\n', '0.04\t0.05\t0.06\n', '0.07\t0.08\t0.09\n']
re.split('(\t|\n)', ''.join(x))
0Like

Your answer might help someone💌