LoginSignup
121
96

More than 1 year has passed since last update.

[python] いろいろな文字種のリストを作成

Last updated at Posted at 2015-06-13

Pythonでシンプルにアルファベットのリストを作る(リンク切れ)に触発されて、いろいろな文字列のリストを作ってみた。

パスワードの辞書やら言葉遊びゲームで使えるのではないかなと思います。

追記(2018/03/30)

たまに見てくださっている方がいるようなので、コメント欄のモジュールについても説明しておきます。
半角の文字列についてはstringモジュールを用いることがベストプラクティスかなと思います。

>>> import string
>>> help(string)
(中略)
DATA
    ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
    ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    digits = '0123456789'
    hexdigits = '0123456789abcdefABCDEF'
    letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv...\xaf\xb0...
    lowercase = 'abcdefghijklmnopqrstuvwxyz'
    octdigits = '01234567'
    printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU...
    punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
    uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    whitespace = '\t\n\x0b\x0c\r '
>>> string.digits
'0123456789'

Pythonにおいてはリストと文字列の扱いは然程変わらないので、その部分の説明は省きます。

アルファベット小文字

[chr(i) for i in range(97, 97+26)]
# [chr(i) for i in range(ord('a'), ord('z')+1)]

アルファベット大文字

[chr(i) for i in range(65, 65+26)]
# [chr(i) for i in range(ord('A'), ord('Z')+1)]

半角数字

[chr(i) for i in range(48, 48+10)]
# [chr(i) for i in range(ord('0'), ord('9')+1)]

ひらがな

[chr(i) for i in range(12353, 12436)]
# [chr(i) for i in range(ord('ぁ'), ord('ん')+1)]

カタカナ

[chr(i) for i in range(12449, 12532+1)]
# [chr(i) for i in range(ord('ァ'), ord('ン')+2)]
# 「ヴ」がいらない場合は「-1」してください

全角数字

[chr(i) for i in range(65296, 65296+10)]
# [chr(i) for i in range(ord('0'), ord('9')+1)]

常用漢字

無理です。連続的には。
ただ、できないことはないです。

常用漢字と文字コードの対応表
(各文字コード版の常用漢字コード表がダウンロードできます。)
csvから漢字を抜き出してリスト化するしかないんじゃないかな・・・

コメント欄を削除した上で以下を実行。

import csv
kanji = []
with open('/path/to/joyo-kanji-code-u.csv', 'r') as f:
    data = csv.reader(f)
    
    for row in data:
        kanji.append(row[0])

う〜ん。
2136個のリストとか重そう・・・
表外も含んだものはご自身で頑張って作って下さい。

半角記号

これも連続的には無理ですね。
ASCIIを定めた人が悪い希ガス・・・
いい方法が浮かばなかったので一例を記載。

eisu = [chr(i) for i in range(97, 97+26)]
eisu.extend([chr(i) for i in range(65, 65+26)])
eisu.extend([chr(i) for i in range(48, 48+10)])

[chr(i) for i in range(33, 127) if chr(i) not in eisu]
# 因みに「33」を「32」にすると半角空白が入る

お気づきだとは思うが半角文字全てなら[chr(i) for i in range(32, 127)]

おまけ

一個一個コピペするのは面倒だと思うので欲しいリストを返す関数を置いておきますね。
当然ながら常用漢字と半角記号はあとづけでお願いします。

# アルファベット小文字→(97, 123)
# アルファベット大文字→(65, 91)
# 半角数字→(48, 58)
# ひらがな→(12353, 12436)
# カタカナ→(12449, 12532+1)
# 全角数字→(65296, 65306)

def moji_list(*args):
    moji = []
    for i in range(len(args)):
        moji.extend([chr(j) for j in range(args[i][0], args[i][1])])
    return moji

moji_list((97, 123), (65, 91), (48, 58))
# ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

ord()で指定するのもありだと思いますよ。
 
 
 

121
96
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
121
96