LoginSignup
3
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-02

使わないと忘れる

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

3
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5