Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

追記(2018/3/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)]

常用漢字

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

つ[UTF-8版の常用漢字コード表
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()で指定するのもありだと思いますよ。
 
 
 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away