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

回答編集履歴

1

aa

2018/11/01 06:15

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -4,4 +4,30 @@
4
4
  lst = ['1', '2', 'あいう', '3', 'a']
5
5
  lst = [int(v) for v in lst if v.isdigit()]
6
6
  print(lst) # [1, 2, 3]
7
+ ```
8
+
9
+ ## 追記
10
+
11
+ ご指摘いただいた通り、符号を含む数値は isdigit() では False になってしまい、駄目でした。標準関数で数値かどうか判断できる関数がないのか探してみたのですが、なさそうですね。
12
+ can110 さんが提案されたやり方が正着と思われます。
13
+
14
+ > str.isdecimal(): 全ての文字が十進数字なら真、そうでなければ偽
15
+ > 半角・全角のアラビア数字が真
16
+ > str.isdigit(): 全ての文字が数字なら真、そうでなければ偽
17
+ > 半角・全角のアラビア数字、特殊数字が真
18
+ > str.isnumeric(): 全ての文字が数を表す文字なら真、そうでなければ偽
19
+ > 半角・全角のアラビア数字、特殊数字、漢数字が真
20
+ [引用元](https://note.nkmk.me/python-str-num-determine/)
21
+
22
+ ```python
23
+ def is_int(v):
24
+ try:
25
+ num = int(v)
26
+ except ValueError:
27
+ return False
28
+ return True
29
+
30
+ lst = ['1', '-2', 'あいう', '-3', 'a']
31
+ lst = [int(v) for v in lst if is_int(v)]
32
+ print(lst) # [1, 2, 3]
7
33
  ```