schedule2018-07-21

17. 1列目の文字列の異なり

はじめに

言語処理100本ノック 2015

Pythonを勉強するため、東京工業大学の岡崎教授が出題されている言語処理100本ノック 2015を解いていきます。

より深く理解するため、別解や利用したライブラリの解説もまとめていきます。

環境

Python3.6

OS : mac
2章からUNIXコマンドの問題ですが、macもターミナルから利用できるようです。

問題

hightemp.txtは,日本の最高気温の記録を「都道府県」「地点」「℃」「日」のタブ区切り形式で格納したファイルである.以下の処理を行うプログラムを作成し,hightemp.txtを入力ファイルとして実行せよ.さらに,同様の処理をUNIXコマンドでも実行し,プログラムの実行結果を確認せよ.

17. 1列目の文字列の異なり
1列目の文字列の種類(異なる文字列の集合)を求めよ.確認にはsort, uniqコマンドを用いよ.

解答:Python

points

  • 1列目を取り出す
  • 空白文字は除く
  • 重複を除く

program

def read_file(file_name):
    with open(file_name, 'r') as file:
        return file.read()

lines = read_file('hightemp.txt').split('')

# 空行の削除
lines = list(filter(lambda line: line != '', lines))

# 1列目の取り出し
cal1 = set(map(lambda line: line.split('\t')[0].strip(), lines))

print("".join(cal1))

出力

山梨県
静岡県
岐阜県
和歌山県
愛媛県
群馬県
愛知県
千葉県
高知県
埼玉県
山形県
大阪府

解説

1列目の取り出しまでは、問題12. 1列目をcol1.txtに,2列目をcol2.txtに保存と同じです。

set()は配列から集合を生成します。つまり、重複のない異なる文字列の集合となります。

解答:UNIXコマンド

考え中。。。

続いての記事

Python3で言語処理100本ノックまとめ

前の問題:16. ファイルをN分割する

次の問題:18. 各行を3コラム目の数値の降順にソート