LoginSignup
2
4

More than 5 years have passed since last update.

pythonメモ:map -リストの各要素に同じ処理を施す

Last updated at Posted at 2017-08-30

動機

以前の投稿で、改行区切りのテキストファイルを読み込んでリストにした際、各要素に改行記号が含まれてしまったので、それを削除したかった。

map関数でリストの各要素を処理

こちらのブログ記事を参考にさせていただきました。
map(処理,リストオブジェクト)とすることで、各要素に処理を適用できるんですね。
ついfor文を回してしまいそうになります。

動機にあるリンクの以前の投稿に乗せたスクリプトの改良版です。

contain_or_not.py
import sys

r0 = open('vocab.txt','r') #読み込みモードでファイルを開く
vocab  = r0.readlines()    #vocab.txtには改行区切りで単語が入っている
r0.close()

argvs = sys.argv
words = argvs[1:] #argvs[0]は実行時のファイル名が入っている

def remove(s):
  return s.replace('\n','') #replace('置換前','置換後')該当する文字列を置換する

new_vocab = list(map(remove, vocab)) #map関数でvocabの各要素の改行文字を削除

for word in words:
  if word in new_vocab:
    print(word + ' is in vocab at line %d.' %(new_vocab.index(word)+1))
  else:
    print(word + ' is not in vocab.')

ついでに、確かめたい単語がリストの何行目にあるかも出力されるようにしました。

イテレータってなんだろう

はじめ何も考えずにmap関数を用いたら、new_vocabがmapオブジェクトになってしまったので、list関数を使って再度リスト化しました。
mapオブジェクトはイテレータと呼ばれるらしい。for文を書く代わりに、リストの各要素に対して同じ処理を施してくれる機能を持ったオブジェクトということなのでしょうか。まだまだ理解が浅い。

2
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4