teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2019/04/25 17:18

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -17,4 +17,60 @@
17
17
  **実行結果** [Wandbox](https://wandbox.org/permlink/cfLa0uKswt8wUfnr)
18
18
  ```
19
19
  ['1111.111110', '-864.197532', '121932.631113', '0.125000']
20
- ```
20
+ ```
21
+
22
+ おまけ
23
+ ---
24
+ あくまでリスト処理に依って問題を解決するなら。
25
+
26
+ ---
27
+ > test_list_1 = [(10,100),100,200,300]
28
+ 下のようなリストにしたい
29
+ test_list_2 = [10,100,100,200,300]
30
+
31
+ いわゆるflatten処理ですね。
32
+ 再帰を利用して書くと見通しが付きやすいことが知られています。
33
+ ```Python
34
+ def _flatten(src):
35
+ if isinstance(src, str):
36
+ yield src
37
+ elif hasattr(src, '__iter__'):
38
+ for block in src:
39
+ yield from _flatten(block)
40
+ else:
41
+ yield src
42
+
43
+ def flatten(src):
44
+ return list(_flatten(src))
45
+
46
+ src = [(10, 100), 100, 200, 300]
47
+ dst = flatten(src)
48
+
49
+ print(dst)
50
+ ```
51
+
52
+ **実行結果** [Wandbox](https://wandbox.org/permlink/coE4JpLtsXgFdtBR)
53
+ ```
54
+ [10, 100, 100, 200, 300]
55
+ ```
56
+
57
+ ---
58
+ > [('1111.111110', ''), ('-864.197532', ''), ('121932.631113', ''), ('', '0.125000')]
59
+ 下のようなリストにしたい。または、この形のリストで抽出したい。
60
+ [1111.111110,-864.197532,121932.631113,0.1250000]
61
+
62
+ リスト内の全ての要素について、空でない文字列を選択したいケースですね。
63
+ こんなふうに書けそうです。
64
+ ```Python
65
+ src = [('1111.111110', ''), ('-864.197532', ''), ('121932.631113', ''), ('', '0.125000')]
66
+ dst = [float(l or r) for l, r in src]
67
+
68
+ print(dst)
69
+ ```
70
+
71
+ **実行結果** [Wandbox](https://wandbox.org/permlink/THeyTO5fBCdSP6wS)
72
+ ```
73
+ [1111.11111, -864.197532, 121932.631113, 0.125]
74
+ ```
75
+
76
+ Pythonのor演算子の独特な仕様を存分に活用できます。