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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

861閲覧

python 3.X list 特定の位置にある文字の判別

6Hawaiian

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/06/12 09:01

python

1 2H12 = ("Whiteberry", "aiko", "Ishihara junko", "Nakamura Mitsuko", "Hana*Hana", 3 "Godai Natsuko", "MAX", "Fuji Ayako", "Nagayama Yoko", "Evely Little Thing", 4 "Harada Yuri", "Morning Musume", "Sakamoto Fuyumi", "Kouzai Kaori", "Hamasaki Ayumi", 5 "Suzuki Ami", "hitomi", "Koyanagi Yuki", "Matsuda Seiko", "Yashiro Aki", 6 "Pink Lady", "Kawanaka Miyuki", "Kobayashi Sachiko", "Yuki Saori", "Yasuda Sachiko", 7 "Ishikawa Sayuri", "Amuro Namie", "Wada Akiko", "Tendo Yoshimi", 8 "Fujii Takashi", "Porno Graffitti", "DA PUMP", "Yamakawa Yutaka", "19", 9 "Oizumi itsurou", "TOKIO", "Yamamoto joji", "Sada Masashi", "Saijo Hideki", 10 "Toba Ichiro", "Hirai Ken", "Yoshi Ikuzo", "Kayama Yuzo", "L'Arc~en~Ciel", 11 "Yaen", "Hikawa Kiyoshi", "Mikawa Kenichi", "Fuse Akira", "Maekawa Kiyoshi", 12 "Alice", "Mori Shinichi", "Go Hiromi", "Nishikiori Ken", "Hosokawa Takashi", 13 "SMAP", "Kitajima Saburo", "Itsuki Hiroshi") 14 15

という文字列から特定の文字(iとIのような)を含む要素を抜き出すというのは

python

1 2list = list(H12) 3 4list_in =[i for i in list if "i" or "I" in i] 5print(list_in)

で導き出したのですがこの中からさらに空白含む二文字目にiかIを含むもののみ抜き出す方法が思いつかず苦戦しています。
forとindexを利用して導出という手を考えてみたものの上手に動かず八方塞がりとなっています。
よろしければ解決法をご教授いただけると幸いです。

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

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

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

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

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

guest

回答2

0

文字列から特定の文字(iとIのような)を含む要素を抜き出す

Python

1[s for s in H12 if 'i' in s.lower()]

空白含む二文字目にiかIを含むもののみ抜き出す

Python

1[s for s in H12 if len(s) > 1 and s[1].lower() == 'i']

あと、

Python

1list = list(H12)

のようにタプルからリストへの変換は不要。
(内包表記自体がタプルからリストに変換している処理であって、タプル自体を書き換えているわけでは無いためこの処理は冗長であり不要)

また変数名に予約後(list)を使用するのは止めたほうが良い。

投稿2020/06/12 10:17

magichan

総合スコア15898

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

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

6Hawaiian

2020/06/12 11:33

回答ありがとうございます。 変数名にlistを使用しないほうが良い旨を見落としていました。 大変ありがとうございます。
guest

0

ベストアンサー

Python

1lst = list(H12) 2 3list_in =[i for i in lst if "i" in i or "I" in i] 4print(list_in) 5# ['Whiteberry', 'aiko', 'Ishihara junko', 'Nakamura Mitsuko', 'Godai Natsuko', 'Fuji Ayako', 'Evely Little Thing', 'Harada Yuri', 'Morning Musume', 'Sakamoto Fuyumi', 'Kouzai Kaori', 'Hamasaki Ayumi', 'Suzuki Ami', 'hitomi', 'Koyanagi Yuki', 'Matsuda Seiko', 'Yashiro Aki', 'Pink Lady', 'Kawanaka Miyuki', 'Kobayashi Sachiko', 'Yuki Saori', 'Yasuda Sachiko', 'Ishikawa Sayuri', 'Amuro Namie', 'Wada Akiko', 'Tendo Yoshimi', 'Fujii Takashi', 'Porno Graffitti', 'Oizumi itsurou', 'TOKIO', 'Yamamoto joji', 'Sada Masashi', 'Saijo Hideki', 'Toba Ichiro', 'Hirai Ken', 'Yoshi Ikuzo', "L'Arc~en~Ciel", 'Hikawa Kiyoshi', 'Mikawa Kenichi', 'Fuse Akira', 'Maekawa Kiyoshi', 'Alice', 'Mori Shinichi', 'Go Hiromi', 'Nishikiori Ken', 'Hosokawa Takashi', 'Kitajima Saburo', 'Itsuki Hiroshi'] 6````or`は 7`<条件> or <条件>`と書きます。どちらかが`True`だと`True`が返ります。 8`"i" or "I" in i`だと、`"i"`は空文字列ではない つまりTrueなのでいつもTrueになってしまいます。 9 10-------おまけ------- 11リスト内包表記で`if`文をごちゃごちゃにしたら分かりにくいので`.lower()`で全部小文字にするのもアリ。 12```Python 13lst = list(H12) 14 15list_in =[i for i in lst if "i" in i.lower()] 16print(list_in) 17# ['Whiteberry', 'aiko', 'Ishihara junko', 'Nakamura Mitsuko', 'Godai Natsuko', 'Fuji Ayako', 'Evely Little Thing', 'Harada Yuri', 'Morning Musume', 'Sakamoto Fuyumi', 'Kouzai Kaori', 'Hamasaki Ayumi', 'Suzuki Ami', 'hitomi', 'Koyanagi Yuki', 'Matsuda Seiko', 'Yashiro Aki', 'Pink Lady', 'Kawanaka Miyuki', 'Kobayashi Sachiko', 'Yuki Saori', 'Yasuda Sachiko', 'Ishikawa Sayuri', 'Amuro Namie', 'Wada Akiko', 'Tendo Yoshimi', 'Fujii Takashi', 'Porno Graffitti', 'Oizumi itsurou', 'TOKIO', 'Yamamoto joji', 'Sada Masashi', 'Saijo Hideki', 'Toba Ichiro', 'Hirai Ken', 'Yoshi Ikuzo', "L'Arc~en~Ciel", 'Hikawa Kiyoshi', 'Mikawa Kenichi', 'Fuse Akira', 'Maekawa Kiyoshi', 'Alice', 'Mori Shinichi', 'Go Hiromi', 'Nishikiori Ken', 'Hosokawa Takashi', 'Kitajima Saburo', 'Itsuki Hiroshi']

######-------追記-------
すみません502エラーが出まくって遅くなりました。
まず、

list_inにて抽出したものの中からさらに文字列の2番目にiかIがあるもののみ抽出する

二番目にiIがあるんだからiIが入っているのは絶対なので、二番目にiIがあるものを抽出すればよいですね。magichan様も回答されてましたが、
2番目というのはindex番号1なので

Python

1lst = list(H12) 2 3list_in =[i for i in lst if i[1].lower() == 'i'] 4print(list_in) 5```とする。しかし、このままだと`i`が1文字の時にエラーが出るので 6```Python 7list_in =[i for i in lst if len(s) > 1 and i[1].lower() == 'i'] 8```とかにする必要があります。 9また、 10```Python 11list_in =[i for i in lst if len(s) > 1 and i[1] in ['i', 'I']] 12````i`のに文字目が`['i', 'I']`というリストの中に入っているかとかでもよい。 13 14--- 15あと**magichan**様も言っていましたが`list`はPythonの組み込み関数なので、

list = [1, 2, 3]
a = (2, 3, 4)
a = list(a)

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable

投稿2020/06/12 09:20

編集2020/06/12 10:54
ForestSeo

総合スコア2722

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

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

6Hawaiian

2020/06/12 09:53

ご回答ありがとうございます。 "i" for "i" in iの部分の組み立て方、大変助かります。 不躾な質問で申し訳ないのですが、list_inにて抽出したものの中からさらに文字列の二番目にiかIがあるもののみ抽出することなどは可能でしょうか?
ForestSeo

2020/06/12 10:41

回答を編集しました。
6Hawaiian

2020/06/12 11:33

エラー多発している中解答ありがとうございます。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問