python組み込み関数のお勉強(1)

  • 1
    いいね
  • 4
    コメント

使わないと忘れる

だいぶ前に教則本的な本を1冊通したものの、普段pythonを触らないので、割と初歩的な部分でも疎いことに気づいた。

ということで、以下、忘れないようにメモ。
今回は組み込み関数が対象。順次追加予定。

zip関数

複数のシーケンスを同時にループできるらしい(シーケンスがよくわからないが、List等のデータのまとまりと考えればいいのか?)。

list1 = [1,2,3,4,5]
list2 = [5,6,7,8,9]
for i, j in zip(list1, list2):
print(i, j)

結果はこんな感じ。

1 5
2 6
3 7
4 8
5 9

これは便利。

sum関数

その名の通り、要素を足しあげる関数。

list = [1,2,3,4,5]
sum(list)

当然、結果は
15

この関数の面白いところは、二重リストをフラット化できること。

list = [[1,2], [3], [4,5]]
sum(list, [])

結果はこんな感じ。

[1, 2, 3, 4, 5]

すごい便利。

ただ、処理速度は速くないとのこと。
公式では、文字列をくっつける時はjoin関数を推奨している。

join関数

その名の通り、文字列をjoinする。

sep.join(seq)
sepを区切り文字として、seqを連結してひとつの文字列にする。

hiru = u'昼飯は'
meshi = u'カップラーメン'
u'、'.join([hiru, meshi])

'昼飯は、カップラーメン'

上記3つの関数を組み合わせて、こんなことも可能。

list1 = u'あまてめと'
list2 = u'けしおでう'
"".join(sum(zip(list1, list2), ()))

2つの文字列を1文字ずつ交互に結合。

'あけましておめでとう'

set(セット) ※2016/1/3 追記

setは集合を表すデータ型。
集合とは、リストとかと同様、データの集まりだが、それらと違う点は以下の2点。
1.重複は削除される
2.順番がない

特に2.がひっかかる。
え、順番がないって何?出力するときは必ず順番つくんじゃ?
って感じでイメージが湧かない。。。

とりあえず使ってみよう。
setをセット。

sample1 = set([1,2,3,4,5])

出力してみる。

sample1
Out[3]: 
{1, 2, 3, 4, 5}

やっぱ順番あるよね。。。
とりあえず順番についてはスルー。

setの便利なところは、集合というだけあって集合演算ができるらしい。
ということで、集合をもう一つ準備。

sample2 = set([1,3,5,7,9])

和集合

sample1 | sample2
Out[5]: 
{1, 2, 3, 4, 5, 7, 9}

差集合

sample1 - sample2
Out[6]: 
{2, 4}
sample2 - sample1
Out[7]: 
{7, 9}

積集合

sample1 & sample2
Out[8]: 
{1, 3, 5}

「順番がない」ということの意味や、知っとかないとつまずくところなどはよくわからん。
当分は知らなくても良さそう?良いことはないんだろうけど。

悩み

「なんかもっと良くならないかなぁ」という課題を、忘れないようにメモ。

複数の文字パターンを一発で削除

"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.

というやつ(よく見るから有名?)。

以下のようにやってみたのだが、
str = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
print([len(i.replace(',', '').replace('.', '')) for i in str.split()])
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]

この部分
i.replace(',', '').replace('.', '')
が冗長。どうにかならんものか。

2016/1/2 追記
ググったらtranslate関数を使って
str.translate(None, ',.')
なることができるとあったが、出来なかった(2.x系と3.x系の違い?)