回答編集履歴

1

追記

2019/04/25 17:18

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -37,3 +37,115 @@
37
37
  ['1111.111110', '-864.197532', '121932.631113', '0.125000']
38
38
 
39
39
  ```
40
+
41
+
42
+
43
+ おまけ
44
+
45
+ ---
46
+
47
+ あくまでリスト処理に依って問題を解決するなら。
48
+
49
+
50
+
51
+ ---
52
+
53
+ > test_list_1 = [(10,100),100,200,300]
54
+
55
+ 下のようなリストにしたい
56
+
57
+ test_list_2 = [10,100,100,200,300]
58
+
59
+
60
+
61
+ いわゆるflatten処理ですね。
62
+
63
+ 再帰を利用して書くと見通しが付きやすいことが知られています。
64
+
65
+ ```Python
66
+
67
+ def _flatten(src):
68
+
69
+ if isinstance(src, str):
70
+
71
+ yield src
72
+
73
+ elif hasattr(src, '__iter__'):
74
+
75
+ for block in src:
76
+
77
+ yield from _flatten(block)
78
+
79
+ else:
80
+
81
+ yield src
82
+
83
+
84
+
85
+ def flatten(src):
86
+
87
+ return list(_flatten(src))
88
+
89
+
90
+
91
+ src = [(10, 100), 100, 200, 300]
92
+
93
+ dst = flatten(src)
94
+
95
+
96
+
97
+ print(dst)
98
+
99
+ ```
100
+
101
+
102
+
103
+ **実行結果** [Wandbox](https://wandbox.org/permlink/coE4JpLtsXgFdtBR)
104
+
105
+ ```
106
+
107
+ [10, 100, 100, 200, 300]
108
+
109
+ ```
110
+
111
+
112
+
113
+ ---
114
+
115
+ > [('1111.111110', ''), ('-864.197532', ''), ('121932.631113', ''), ('', '0.125000')]
116
+
117
+ 下のようなリストにしたい。または、この形のリストで抽出したい。
118
+
119
+ [1111.111110,-864.197532,121932.631113,0.1250000]
120
+
121
+
122
+
123
+ リスト内の全ての要素について、空でない文字列を選択したいケースですね。
124
+
125
+ こんなふうに書けそうです。
126
+
127
+ ```Python
128
+
129
+ src = [('1111.111110', ''), ('-864.197532', ''), ('121932.631113', ''), ('', '0.125000')]
130
+
131
+ dst = [float(l or r) for l, r in src]
132
+
133
+
134
+
135
+ print(dst)
136
+
137
+ ```
138
+
139
+
140
+
141
+ **実行結果** [Wandbox](https://wandbox.org/permlink/THeyTO5fBCdSP6wS)
142
+
143
+ ```
144
+
145
+ [1111.11111, -864.197532, 121932.631113, 0.125]
146
+
147
+ ```
148
+
149
+
150
+
151
+ Pythonのor演算子の独特な仕様を存分に活用できます。