使わないと忘れる
だいぶ前に教則本的な本を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系の違い?)