【python】基礎を復習 (リスト, タプル, ディクショナリ)

それぞれ括弧の種類がちがう。

  • リスト => [ ] (角括弧)
  • タプル => ( ) (括弧)
  • ディクショナリ => { } (中括弧)

リスト

#基本
# 空リスト作成
list1 = []
list2 = list()

# 要素の含むリスト作成
list3 = [0, 1, 2]
いわゆる配列にあたる。
list1 = [1 , 2, 3]

# 他のリストのコピーを作成 (完全なコピーではない)
list2 = list(list1)

# 連番のリストを作成
list3 = range(3)        #[0, 1, 2]
list4 = range(3, 5)     #[3, 4, 5]
list5 = range(1, 21, 3) #[1, 4, 7, 10, 13, 16, 19] 3番目の引数で値の増減量を指定
rangeはfor文でも便利に使えるのでどんどん使いたいところ。

タプル

# 空タプルの作成
tuple1 = ()
tuple2 = tuple()
# 要素が1つのタプルの作成
tuple3 = (1,)
# 複数要素からなるタプルを作成
tuple4 = (0, '1', 2, [3], -4)
タプルは、変更のできない配列。

タプル / リストの操作

list  = [1, 2, 3, 4, 5]
tuple = (6, 7, 8, 9, 10)

# 要素の参照
list[1]          # 2
list[-1]         # 5 負数は末尾から参照
tuple[2]   	     # 8

# 要素の代入
list[0] = 100    # [100, 2, 3, 4, 5]
(タプルは変更できないので)要素の代入はリストのみ行える。
#タプル / リストの要素数取得
len(list)
len(tuple)
a = [1, 2, 3, 4]

#要素の取り出し
first = a.pop(0)        # 1 (a == [2, 3, 4])

#末尾の取り出し
last  = a.pop()         # 4 (a == [2, 3])

#要素の追加
a.insert(0, 5)          # [5, 2, 3]

#末尾に追加
a.append(9)             # [5, 2, 3, 9]

#末尾にリスト追加
a.extend([0, 1, 2, 3])  # [5, 2, 3, 9, 0, 1, 2, 3]

辞書 (ディクショナリ)

# 辞書 = ディクショナリ ( ≒ 連想配列)
dic = {"レモン": 100, "アボカド": 150, "椎茸": 200}


# 要素の参照
dic['レモン'] # 100

# 要素の代入
dic['アボカド'] = 300
他の言語の連想配列と同じく、キーから値の取得ができる。
dic = {"a": 100, "b": 200, "c":300}

#キーの取得
print dic.keys()    # ['a', 'c', 'b'] *順不同となるので注意

#値の取得
print dic.values()  # [100, 300, 200]

#キーの存在確認
print "a" in dic    # True

#ハッシュキーの削除
del dic["a"]


【python】基礎を復習 (変数 , 演算 , 文字列)

タイトル通り。(なんか順番がおかしなかんじだけど….。)
ちなみにこちらを参考に書いてます。

環境:python2.7.5

変数

a = 'hoge'
a = 1
a = 5.9
num = 1 + 1j #jは虚数
文字列は「’」か「”」で囲む。
整数、少数もok。
宣言や型は必要ない。

演算

num = 1 + 1 
num = 1 - 1
num = 1 * 2
num = 5 / 2    # 整数のみの除算 => 整数で返る
num = 5.0 / 2  # どちらかが少数の除算 => 少数で返る
num = 5 % 2    # 剰余
num = 2 ** 3   # 累乗
4行目、5行目は重要そう。
i += 1 #インクリメント
i -= 1 #ディクリメント
++演算子はなし。上記のみの書き方になる。
#論理演算
a or b  # aが偽ならb 、そうでなければa
a and b # aが偽ならa 、そうでなければb
not a   # aが偽ならTrue 、そうでなければFalse
真偽を返すのはnotのみであるので注意。

文字列

#基本
a = 'aaa'
b = "bbb"

#改行を含んだ文字列
c = '''ccc
ccc
ccc'''
#ダブルクォートでもok
d = """ddd
ddd
ddd"""
改行はエスケープシーケンス(\n)でもよい。
# coding: UTF-8
# 日本語のコメントを書く場合は、UTR-8に設定する
print u"お昼はうどんを食べます!"
2系はunicodeサポートしているので日本語が使える。print文にuをつける。
*一行目の宣言はかならずファイルの先頭に記述する。

文字列処理いろいろ

# 文字列フォーマット
# 基本
str = "{0} : {1} + {2} = {3}"
print str.format("足し算" , 8, 0.5, 8 + 0.5) 
# 足し算 : 8 + 0.5 = 8.5

# 辞書によるformat
str = "名前 : {0[name]}, 性別 : {0[sex]}"
print str.format({"name":"tanaka", "sex":"male"}) 
# 名前 : tanaka, 性別 : male

str = """木材としては、日本国内でも「{0}」という名称で扱われる。(中略)
1660年から1720年にかけ、ヨーロッパ市場ではイギリスデザインや{0}種の製品が大きな人気を博し、
ヨーロッパ家具の歴史では「{0}の時代」と呼ばれるほど持て囃された。"""
print str.format("ウォールナット")

# 木材としては、日本国内でも「ウォールナット」という名称で扱われる。(中略)
# 1660年から1720年にかけ、ヨーロッパ市場ではイギリスデザインやウォールナット種の製品が大きな人気を博し、
# ヨーロッパ家具の歴史では「ウォールナットの時代」と呼ばれるほど持て囃された。
文字列フォーマットによる置き換え。
(.formatメソッドの他に「%演算子」に置き換えも可能だが、こちらは廃止予定だそう。)
# 長さ(文字数)
#   =>  「 」(スペースもカウント)
str = 'SUPER GREAT SPECIAL CONTENTS'
length = len(str)
print length    # 28

str = '日本語むつかしい'
length = len(str)
print length    # 24

str = u'日本語むつかしい'
length = len(str)
print length    # 8
マルチバイト文字を扱うときは注意。
「u」でunicode宣言してるか否かで結果が異なる。
str1 = 'aaa'
str2 = 'bbb'

# --結合--
join1 = str1 + str2
print join1 # aaabbb
 
#(区切り文字を指定して)結合
join2 = ','.join([str1, str2])
print join2 # aaa,bbb (「,」で区切られた文字列が取得できる )
 
# --分割--
str = 'aaa bbb  ccc'
record1 = str.split()
print record1 # ['aaa', 'bbb', 'ccc'] デフォルトは半角スペースで分割
 
#(区切り文字を指定して)結合
record2 = str.split(',')
print record1 # ['aaa', 'bbb', 'ccc']
 
# --切り出し--
# [start:stop]の形で指定して切り出し
str = '0123456789'
substr1 = str[:3] # 0~stop-1を切り出し
substr2 = str[3:6] # start~stop-1を切り出し
substr3 = str[6:]  #start~末尾を切り出し
 
print substr1 # 012
print substr2 # 345
print substr3 # 6789
 
# --検索--
str = 'abcdefg'
result = str.find('cd') # 見つかった場合はその位置、見つからなかった場合は-1が返る
print result # 2


【python】基礎を復習 (if文 , for文 , while文)

随分昔にふと「なんかpython触ってみたい、流行ってるらしいし」などと思ったことがあって、
そのときは結局すぐ挫折したのだけど、
最近また現実逃避の道具として復習し始めてる。

といっても、何か目的があるわけでもなく、また完全な独習なので遅々としてるけど…。
せっかくなので、備忘録として基礎をまとめていこうと思う。

とりあえずタイトル通り。最初はif文とfor文while文などのループ処理。

共通しているのは、

  • ・{}など括弧は使わない、インデントでブロック扱いとなる
  • ・条件文の後にはコロン(:)を付ける
といったところ。

*なお環境は2.7.5です。
3系と2系でpythonはかなり差異があるそうなので、
予め「python -V」でバージョンを確認した方が良いです。

if文

# 基本
n = 5

if n < 30:
    print "ok"
普通です。
# if文色々
score = 64

if score >= 80:
    print "great!"
elif 80 > score > 50:
    print "ok"
else:
    print "too bad.."
注意するのは、else ifはなくelifのみという点。
score = 40
print "ok" if score >= 80 else "too bad..."
条件演算子( ≒ 三項演算子)でも書ける。

for文

#基本
for i in [1, 3, 6, 7, 9]:
    print i
1
3
6
7
9
…と表示される。
for i in [1, 3, 6, 7, 9]:
    sum += i
else:
    print sum
else:も付けられる。最後に実行される。
#rangeで簡単にループが作れる
for i in range(3):
    print i
0
1
2
…と表示される。
通常のfor文っぽくて便利。
#入れ子も可能
for i in range(10):
    if i % 3 == 0:
        print "hoge"
    print i
else:
    print "\nfin...."
3の倍数のみhoge表示。
#辞書のループ
a = {"Tom":100, "Bob":200, "Elly":500}

#keyとvalue両方ループ表示
for k , v in a.iteritems():
    print "key: %s value: %d" % (k, v)

#keyのみループ表示
for k in a.iterkeys():
    print k

#valueのみループ表示
for v in a.itervalues():
    print v
辞書 = ディクショナリー(連想配列みたいなもの)を利用したfor文。  

while文

# 基本
n = 0

while n < 10:
    print n
    n += 1
普通ですね。
    #無限ループ。1かTrueを使うのが慣例らしい
    while 1:  
     print "hoge"  
当然breakするか強制終了するしか抜けられない。
# continueで3のときだけ抜ける
while n < 10:
    if n == 3:
        n += 1
        continue
    print n
    n += 1
else:
    print "end"
ここでのelseはwhileがfalseとなったときに実行される。
なので、下の「end」は表示されない。
#breakはelseも表示されない
while n < 10:
    if n == 3:
        n += 1
        break
    print n
    n += 1
else:
    print "end"

思ったこととか

インテントブロックは慣れたら見やすい気がしてきた。


【python】超軽量webフレームワークbottleを試してみる

bottleはわずか1ファイルで構成されるwebフレームワーク。(公式サイト

今回はこちらの記事を参考にbottleを導入した。

まず最初に、easy_instollよりpipをインストール
(pipについてはこちらを参照)

sudo easy_install pip
pip -v

二行目でpipがインストールされたことを確認したら、今度はpipを介してbottleをインストールする。

sudo pip install bottle

次に、簡単にbottleの動作チェック。
下記ファイルを実行、
8080ポートでサーバーを立ち上げてみる。

# coding: UTF-8
# bottleフレームワークの利用

from bottle import route, run, template

@route('/hb/<name>')
def index(name='World'):
    return template('<b>Hello {{name}}</b>!', name=name)

#デバッグモードon, リローダーon
run(host='localhost', port=8080, debug=True, reloader=True)

確認。下記URLを叩いてブラウザに表示されればOK


http://localhost:8080/hb/{*適当な文字列}