Python初心者の避けては通れない暗記+小技

思いついたら追記していきます(^o^)

Python初心者の避けては通れない暗記

型が厳密だからね(PHPerの人は気をつけようね)

intとstrのconcatなんてできないよ!って怒られます。

>>> 1 + "位おめでとう"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
  • str(10) とか int(“1”) を覚える。
  • terminalで実行したとき引数で与えられた数字は文字列です。int(sys.args[0])などして数字に変換しましょう。

if文の条件途中で改行したいときはバックスラッシュや!

Macの人は、Optionを押しながら¥な!(^o^)

>>> ppap = "pen pinapple apple pen"
>>> if "pen" in ppap \
...     or "banana" in ppap:
...     print "pico taro! I like this song!"
... 
pico taro! I like this song!

配列の宣言と辞書の宣言

# 配列
hairetsu = []
hairetsu2 = [1, 2, 3]
# ディクショナリ(辞書)
dic = {}
dic2 = {"name": "apple", "count": 3}

配列とディクショナリのループ

>>> hairetsu2 = [1, 2, 3]
>>> for s in hairetsu2:
...     print s,
...
1 2 3
>>> dic = {"apple": 3, "banana": 2, "cherry": 8}
>>> for k, v in dic.items():
...     print "name:" + k + " value:" + str(v)
...
name:cherry value:8
name:apple value:3
name:banana value:2

※ディクショナリのループは並び順は意図しないものになることもあるってことに注意

配列のループとカウント

>>> hairetsu = [3, 1, 5]
>>> for i, s in enumerate(hairetsu):
...     print "No." + str(i+1) + " count:" + str(s)
... 
No.1 count:3
No.2 count:1
No.3 count:5

配列の長さ

>>> list = [1,2,3,4,5,6,7,8,9,0,1,2,3]
>>> len(list)
13

辞書のKeyがあるかないかのチェック

>>> dic = {"apple":100, "banana":200}
>>> "apple" in dic
True
>>> "cherry" in dic
False
>>> dic.has_key("apple")
True
>>> dic.has_key("cherry")
False

個人的にはinよりもhas_keyのほうが違和感が無いのは、Javaっぽいからかしらね

UnicodeDecodeErrorとか文字列について覚えよう!

詳しくはこちら

hikm’s blog
PythonのUnicodeDecodeError、UnicodeEncodeErrorを正しく理解するhttp://hikm.hatenablog.com/entry/20130328/1364492471

ポイント

  • Pythonの文字列型について
    • 文字列(str型)とユニコード文字列(unicode型)は別物
    • 「str型」
    • unicode型」
      • Unicodeを表現可能な型(純粋なバイト列よりも多くの情報をもった文字列形式、と考えると分かりやすい?)
  • Encode、Decodeという言葉について
    • Encode/Decodeが何から何への変換を指しているか?
      • Encode・・・「unicode型」→「str型(utf8, euc-jp, shift-jisなどなど)」に変換すること
      • Decode・・・「str型(utf8, euc-jp, shift-jisなどなど)」→「unicode型」に変換すること

ポイントに書いてあるとおり、普通にコーテーションで囲った文字列は、ascii/utf-8の環境であればstr型になるようです。なので、明示的にunicodeであるよってしてあげたりすること。

日本語の文字列については、十分な理解をしておくと、メールが絡んだり(iso-2022-jp)、CSV(windowsならShift-JIS)が絡んだりしたときにきっと役に立ちます!

Python小技

割り算したときとか、小数点以下が切り捨てになっちゃう…

そういうときは、1.0かけるか、float()を片方に使おう。

>>> 30/1440
0
>>> 1.0*30/1440
0.020833333333333332
>>> float(30)/1440
0.020833333333333332

2つの時間差を計算する

>>> import datetime
>>> ftime = datetime.datetime(2016,12,24,10,10,10)
>>> ltime = datetime.datetime(2016,12,24,12,15,15)
>>> delta = ltime - ftime
>>> print delta.total_seconds()
7505.0
>>> 2 * 60 * 60 + 5 * 60 + 5 # こちらは検算
7505

計算結果は秒になる。

辞書のkeyとかvalueとかでソートする

辞書の順番は保証されない。
辞書の順番は保証されないいいいいいいいいいいいぃぃぃ。

なのでソートしてやる必要がある。

>>> dic = {"banana":200, "apple":100, "cherry":300, "blueberry":500}
>>> sorted(dic.items())
[('apple', 100), ('banana', 200), ('blueberry', 500), ('cherry', 300)]
>>> sorted(dic.items(), key=lambda x:x[1])
[('apple', 100), ('banana', 200), ('cherry', 300), ('blueberry', 500)]

文字列をstrimwidthする!!ことはできないから文字列をスライスする

PHPにはあったけど、Pythonには無いよね(まぁあるほうが変態的なんだろうけど)

>>> aaa = "aaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbccccccccddddddddeeeeeeeeee"
>>> print aaa[:10]
aaaaaaaaaa
>>> print aaa[:100]
aaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbccccccccddddddddeeeeeeeeee
>>> print aaa[:90]
aaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbccccccccddddddddeeeeeeeeee
>>> print aaa[:50]
aaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbccccccccdddddddde
>>>

スポンサーリンク
hige1
hige1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
hige1