2018年1月15日月曜日

[Python] リスト型

リスト型についてのメモです.

まずは,ターミナルでPythonを立ち上げます.
$ Python3

リストは[]括弧内に数字や文字列を配列の中に入れることです.
>>> l = [1, 20, 4, 50, 2, 1, 2]
>>> l
[1, 20, 4, 50, 2, 1, 2]

リストにはインデックスがあるので,以下のようにインデックスを指定してやるとその値が返ってきます.
>>> l[0]
1

リストのインデックスは0から振られるので,以下のようにインデックス 1 は2つ目の数字になります.
>>> l[1]
20

文字列の投稿でも説明がありますが,一番最後のインデックスを出力したい場合は,インデックスを -1 と指定します.
>>> l[-1]
2

インデックスを -2 と指定すると,最後から2番目の値が返ってきます.
>>> l[-2]
1

スライスも可能で,以下は0番目から2番目のひとつ前までを返すには以下のようにします.
>>> l[0:2]
[1, 20]

上記の記載は以下のようにして0を省略することも可能です.
>>> l[:2]
[1, 20]

以下の記載ではインデックス2から5のひとつ前(インデックス4)までを表示します.
>>> l[2:5]
[4, 50, 2]

インデックス2以降を表示するには以下のようにします.
>>> l[2:]
[4, 50, 2, 1, 2]

インデックスの指定で始めと最後のインデックスを省略すると全てのリストが返ってきます.
>>> l[:]
[1, 20, 4, 50, 2, 1, 2]

リストでもlength関数を使って要素数を調べることができます.
>>> len(l)
7

存在しないインデックスを指定するとエラーが返ってきます.
>>> l[100]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

type関数を使って型を調べることができます.
>>> type(l)
<class 'list'>

文字列をリストに変換することができます.
>>> list('abcdefg')
['a', 'b', 'c', 'd', 'e', 'f', 'g']

リストの中からいくつか飛ばしながら抽出するには,以下のようにします.以下の例は2つ飛ばしで表示する例です.
>>> n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> n[::2]
[1, 3, 5, 7, 9]
上記例で,::-1 としてやると,最後から順番に抽出します.
>>> n[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

ネストすることも可能です.以下の例ではxというリストの中にaとnというリストが入っています.
>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]

以下のように x[0]とすると最初のネストになっているリストが表示されます.
>>> x[0]
['a', 'b', 'c']
x[1]とすると次(2つ目)のリストが表示されます.
>>> x[1]
[1, 2, 3]

ネストになっているリスト内の要素を取り出したいときには,最初にネスト内のインデックスを,続いてその中のインデックスを指定します.
>>> x[0][1]
'b'
以下は,インデックス1(2つ目)のリスト内のインデックス2(3つ目)の要素を取り出した例です.
>>> x[1][2]
3
>>> 









2018年1月13日土曜日

[Python] 文字の代入

文字列の代入に関してのメモです.
まずは,ターミナルからPythonを立ち上げます.
$ Python3

以下のように {}の中に.format()内に指定した文字列を代入することができます.

>>> 'a is {}.'.format('a')
'a is a.'

数字も代入することができます.ただし,数字は数値から文字に型変換されています.

>>> 'a is {} {} {}.'.format(1, 2, 3)
'a is 1 2 3.'

括弧({})には以下のように順番が振られていて,.format()内で指定したもの(これにも0から番号が振られている)がその中に代入されます.

>>> 'a is {0} {1} {2}.'.format(1, 2, 3)
'a is 1 2 3.'

また,括弧({})の番号を指定することで,.format()内で指定したものの入り方が変わります.

>>> 'a is {2} {1} {0}.'.format(1, 2, 3)
'a is 3 2 1.'

名前を使っての同様な例です.

>>> 'My name is {0} {1}.'.format('Luke', 'Skywalker')
'My name is Luke Skywalker.'


>>> '私は{1} {0}です.'.format('Luke', 'Skywalker')
'私はSkywalker Lukeです.'

{}括弧内に変数名を付けることも可能です.

>>> 'My name is {name} {family}. 私は{family} {name}です.'.format(name='Luke', family='Skywalker')
'My name is Luke Skywalker. 私はSkywalker Lukeです.'

上記の事柄のJupyter Notebookファイルはこちら(GitHub)で公開しています.
関連したPythonの基礎に関する投稿
変数宣言Print関数数値文字列文字列のインデックスとスライス文字列のメソッド

2018年1月12日金曜日

[Python] 文字列のメソッド

文字列のメソッドについてのメモです.

まずはターミナルからPythonを立ち上げます.
$ python3

以下のように変数 s に文字列を代入して,print関数で表示してみます.
>>> s = 'My name is Mike. Hi Mike.'
>>> print(s)
My name is Mike. Hi Mike.

上記のように定義した変数 s を使って文字列のメソッドを使った表示を行ってみます.
startwithメソッド
>>> is_start = s.startswith('My')
>>> print(is_start)
True

>>> is_start = s.startswith('X')
>>> print(is_start)
False

findメソッド(指定した文字列 -以下の例ではMike- が何文字目からなのかを表示する)
>>> print(s.find('Mike'))
11

rfindメソッド(指定した文字列が次に出てくるのが何文字目かを表示する)
>>> print(s.rfind('Mike'))
20

countメソッド(指定した文字列が何個含まれているかを表示する)
>>> print(s.count('Mike'))
2

capitalizeメソッド(文字列の先頭だけを大文字にして表示する)
>>> print(s.capitalize())
My name is mike. hi mike.

titleメソッド(文の始まり-読点の前-を大文字にして表示する)
>>> print(s.title())
My Name Is Mike. Hi Mike.

upperメソッド(全てを大文字にして表示する)
>>> print(s.upper())
MY NAME IS MIKE. HI MIKE.

lowerメソッド(全てを小文字にして表示する)
>>> print(s.lower())
my name is mike. hi mike.

replaceメソッド(置き換えて表示する)
>>> print(s.replace('Mike', 'Nancy'))
My name is Nancy. Hi Nancy.

上記の事柄のJupyter Notebookファイルはこちら(GitHub)で公開しています.
関連したPythonの基礎に関する投稿
変数宣言Print関数数値文字列文字列のインデックスとスライス

2018年1月11日木曜日

[Python] 文字列のインデックスとスライス

Pythonにはインデックスとスライスというものがあります.以下は,それらに関してのメモです.

インデックスは0から始まります.以下は,word という変数にpythonという文字列を入力して,その変数の各インデックスを表示してみた例です.
>>> word = 'python'
>>> print(word[0])
p
wordに入っているpythonという文字列のインデックス0は,p となります.

同様に,インデックス1は y,インデックス2は t となり,インデックス-1は最後の文字を指定するという意味になるので,n になります.

>>> print(word[1])
y
>>> print(word[2])
t
>>> print(word[-1])
n

存在しないインデックスを指定するとエラーが返ってきます.以下の例ではインデックス100を指定して,エラーが返ってきています.
>>> print(word[10])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range


スライスは,インデックス番号を指定してその間の文字列を抜き出す機能です.
以下の例では,インデックス0から2と指定すると,インデックス0,1の文字が表示されています.すなわち,スライスでは末尾に指定したインデックスの一つ前までが抜き出されることになります.

>>> print(word[0:2])
py

同様に,以下の例では :2 と指定することでインデックス0から1を抜き出す例,2:5 と指定することで,インデックス 2 から 4 までを抜き出す例,2: と指定することでインデックス2から最後までを抜き出す例を示しています.
>>> print(word[:2])
py
>>> print(word[2:5])
tho
>>> print(word[2:])
thon

また,先に指定した文字列を部分的に入れ替えるには,以下の様にします.
>>> word = 'j' + word[1:]
>>> print(word)
jython

さらに len 関数で文字列の長さを取得することが可能です.
>>> n = len(word[:])
>>> print(n)
6

上記の事柄のJupyter Notebookファイルはこちら(GitHub)で公開しています.

関連したPythonの基礎に関する投稿
変数宣言Print関数数値文字列

2018年1月10日水曜日

[Python] 文字列

Pythonの文字列に関するメモです.

まずは,ターミナルでPythonを立ち上げます.
$ python3

文字列は,シングルクォート( ' )もしくはダブルクォート( " )で囲みます.
以下の例は,s という変数にStrings型の test を入れて,s を表示させた例です.
>>> s = 'test'
>>> print(s)
test

文字列を表示するには,上記の例のように変数に入れる必要はなく,以下のように直接記載することもできます.
>>> print('Hello')
Hello

シングルクォートではなくダブルクォートで括っても同じ結果が得られます.
>>> print("Hello")
Hello

文字列の中にシングルクォートが含まれる際にはダブルクォートで括ればシングルクォートが表示されます.
>>> print("I don't know")
I don't know
このような場合にシングルクォートで括るとSyntax errorとなります.

>>> print ('I don't know)

  File "<stdin>", line 1
    print ('I don't know)
                  ^
SyntaxError: invalid syntax

シングルクォートで括る場合は,以下のようにバックスラッシュ( \ )を入れれば正しく表示されます.
>>> print ('I don\'t know')
I don't know

改行を入れる場合には \n を記載します.
>>> print('Hello.\nHow are you?')
Hello.
How are you?

以下のように三重の括弧で括って,実際に表示したいように改行しながら記載することもできます.
>>> print("""
... line1
... line2
... line3
... """)

line1
line2
line3

Windowsのパス表示のようなことをしたい(\ を表示する)時には普通に記載するとエラーとなります.
>>> print('c:\xxx\xxx')
  File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \xXX escape
このような時には,文字列の括りの前に r と記載すると表示されます.r は raw の頭文字です.
>>> print(r'c:\xxx\xxx') # r: raw
c:\xxx\xxx

また,文字列の表示に四則演算子を使うことができます.
>>> print('Hi.' * 3 + 'Mike')
Hi.Hi.Hi.Mike


>>> print('Py' + 'thon')

Python

四則演算子を使わずに括った文字列を連続して書くこともできます.
>>> print('py''thon')
python

変数に入れたものと文字列を演算子で付けることもできます.
>>> prefix = 'py'
>>> print(prefix + 'thon')
python

上記の事柄のJupyter Notebookファイルはこちら(GitHub)で公開しています.
上記の事柄のJupyter Notebookファイルはこちら(GitHub)で公開しています.

関連したPythonの基礎に関する投稿
変数宣言Print関数数値

2018年1月9日火曜日

[Python] 数値

Pythonでの数値の取り扱いに関するメモです.

ターミナルでPythonを立ち上げます.
$ python3

インタプリタでは,以下のようにprint( 2 + 2)と書かずにそのままの計算を書けば実行されます.
>>> print(2 + 2)
4
>>> 2 + 2
4

その他の四則演算は以下のようになります.
>>> 5 - 2
3
>>> 5 * 6
30
>>> 50 - 5 * 6
20
>>> (50 - 5) * 6
270
>>> 8/5
1.6

Pythonでは,数字の型を自動的に認識します.
>>> type(1)
<class 'int'>
>>> type(1.6)
<class 'float'>

小数点に関しては,以下の二通りの記載方法があります.
>>> 0.6
0.6
>>> .6
0.6

その他の演算は以下の通りです.
>>> 17/3
5.666666666666667
>>> 17 // 3
5
>>> 17 % 3
2
>>> 5 * 5
25
>>> 5 ** 2
25
>>> 5 * 5 * 5 * 5 * 5
3125

当然,変数を使った計算も可能です.
>>> x = 5
>>> x
5
>>> y = 10
>>> y
10
>>> x * y
50

小数点以下を丸めることもできます.


>>> pie = 3.14159265359

>>> pie
3.14159265359
>>> round(pie, 2)
3.14
>>> exit()

Pythonではmathモジュールが準備されていて,とても便利です.

>>> import math
>>> result = math.sqrt(25)
>>> print(y)
>>> print(result)
5.0
>>> 
>>> y = math.log2(10)
>>> print(y)
3.321928094887362

mathモジュールの関数について知りたい際には以下のようにhelpを利用することも可能です.
>>> print(help(math))

すると,以下のような様々な関数に関しての説明を見ることができます.
Help on module math:

NAME
    math

MODULE REFERENCE
    https://docs.python.org/3.6/library/math
    
    The following documentation is automatically generated from the Python
    source files.  It may be incomplete, incorrect or include features that
    are considered implementation detail and may vary between Python
    implementations.  When in doubt, consult the module reference at the
    location listed above.

DESCRIPTION
    This module is always available.  It provides access to the
    mathematical functions defined by the C standard.

FUNCTIONS
    acos(...)
        acos(x)
        
        Return the arc cosine (measured in radians) of x.
    
    acosh(...)
        acosh(x)
        
        Return the inverse hyperbolic cosine of x.
    
    asin(...)
        asin(x)
        
        Return the arc sine (measured in radians) of x.
    
    asinh(...)
        asinh(x)
        
        Return the inverse hyperbolic sine of x.
    
    atan(...)
        atan(x)
        
        Return the arc tangent (measured in radians) of x.
    
    atan2(...)
        atan2(y, x)
        
        Return the arc tangent (measured in radians) of y/x.
        Unlike atan(y/x), the signs of both x and y are considered.
    
    atanh(...)
        atanh(x)
        
        Return the inverse hyperbolic tangent of x.
    
    ceil(...)
        ceil(x)
        
        Return the ceiling of x as an Integral.
        This is the smallest integer >= x.
    
    copysign(...)
        copysign(x, y)
        
        Return a float with the magnitude (absolute value) of x but the sign 
        of y. On platforms that support signed zeros, copysign(1.0, -0.0) 
        returns -1.0.
    
    cos(...)
        cos(x)
        
        Return the cosine of x (measured in radians).
    
    cosh(...)
        cosh(x)
        
        Return the hyperbolic cosine of x.
    
    degrees(...)
        degrees(x)
        
        Convert angle x from radians to degrees.
    
    erf(...)
        erf(x)
        
        Error function at x.
    
    erfc(...)
        erfc(x)
        
        Complementary error function at x.
    
    exp(...)
        exp(x)
        
        Return e raised to the power of x.
    
    expm1(...)
        expm1(x)
        
        Return exp(x)-1.
        This function avoids the loss of precision involved in the direct evaluation of exp(x)-1 for small x.
    
    fabs(...)
        fabs(x)
        
        Return the absolute value of the float x.
    
    factorial(...)
        factorial(x) -> Integral
        
        Find x!. Raise a ValueError if x is negative or non-integral.
    
    floor(...)
        floor(x)
        
        Return the floor of x as an Integral.
        This is the largest integer <= x.
    
    fmod(...)
        fmod(x, y)
        
        Return fmod(x, y), according to platform C.  x % y may differ.
    
    frexp(...)
        frexp(x)
        
        Return the mantissa and exponent of x, as pair (m, e).
        m is a float and e is an int, such that x = m * 2.**e.
        If x is 0, m and e are both 0.  Else 0.5 <= abs(m) < 1.0.
    
    fsum(...)
        fsum(iterable)
        
        Return an accurate floating point sum of values in the iterable.
        Assumes IEEE-754 floating point arithmetic.
    
    gamma(...)
        gamma(x)
        
        Gamma function at x.
    
    gcd(...)
        gcd(x, y) -> int
        greatest common divisor of x and y
    
    hypot(...)
        hypot(x, y)
        
        Return the Euclidean distance, sqrt(x*x + y*y).
    
    isclose(...)
        isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0) -> bool
        
        Determine whether two floating point numbers are close in value.
        
           rel_tol
               maximum difference for being considered "close", relative to the
               magnitude of the input values
            abs_tol
               maximum difference for being considered "close", regardless of the
               magnitude of the input values
        
        Return True if a is close in value to b, and False otherwise.
        
        For the values to be considered close, the difference between them
        must be smaller than at least one of the tolerances.
        
        -inf, inf and NaN behave similarly to the IEEE 754 Standard.  That
        is, NaN is not close to anything, even itself.  inf and -inf are
        only close to themselves.
    
    isfinite(...)
        isfinite(x) -> bool
        
        Return True if x is neither an infinity nor a NaN, and False otherwise.
    
    isinf(...)
        isinf(x) -> bool
        
        Return True if x is a positive or negative infinity, and False otherwise.
    
    isnan(...)
        isnan(x) -> bool
        
        Return True if x is a NaN (not a number), and False otherwise.
    
    ldexp(...)
        ldexp(x, i)
        
        Return x * (2**i).
    
    lgamma(...)
        lgamma(x)
        
        Natural logarithm of absolute value of Gamma function at x.
    
    log(...)
        log(x[, base])
        
        Return the logarithm of x to the given base.
        If the base not specified, returns the natural logarithm (base e) of x.
    
    log10(...)
        log10(x)
        
        Return the base 10 logarithm of x.
    
    log1p(...)
        log1p(x)
        
        Return the natural logarithm of 1+x (base e).
        The result is computed in a way which is accurate for x near zero.
    
    log2(...)
        log2(x)
        
        Return the base 2 logarithm of x.
    
    modf(...)
        modf(x)
        
        Return the fractional and integer parts of x.  Both results carry the sign
        of x and are floats.
    
    pow(...)
        pow(x, y)
        
        Return x**y (x to the power of y).
    
    radians(...)
        radians(x)
        
        Convert angle x from degrees to radians.
    
    sin(...)
        sin(x)
        
        Return the sine of x (measured in radians).
    
    sinh(...)
        sinh(x)
        
        Return the hyperbolic sine of x.
    
    sqrt(...)
        sqrt(x)
        
        Return the square root of x.
    
    tan(...)
        tan(x)
        
        Return the tangent of x (measured in radians).
    
    tanh(...)
        tanh(x)
        
        Return the hyperbolic tangent of x.
    
    trunc(...)
        trunc(x:Real) -> Integral
        
        Truncates x to the nearest Integral toward 0. Uses the __trunc__ magic method.

DATA
    e = 2.718281828459045
    inf = inf
    nan = nan
    pi = 3.141592653589793
    tau = 6.283185307179586


上記の事柄のJupyter Notebookファイルはこちら(GitHub)で公開しています.

関連したPythonの基礎に関する投稿
変数宣言Print関数

2018年1月8日月曜日

[Python] Print関数

Pythonでのprint関数についてのメモです.

ターミナルでPythonを立ち上げて,インタプリタを起動します.
$ python3

以下のように表示したい文字列を ' ' で囲って記載します.
下記のように並べて記載したいときはカンマで区切って記載します.すると,以下のように間にスペースが自動的に挿入されます.
>>> print('Hello', 'Daniel')  # Displayed with a space in between.
Hello Daniel

以下のように,区切り(sep)を指定したり,最後をどのように処理するかを指定(end)することも可能です.



>>> print('Hello', 'Daniel', sep = ',', end = '\n') # \n is a line break
Hello,Daniel

このように記載した場合は,最初の例のようなスペースは挿入されません.



また,インタプリタでは無理ですが,以下のようなコードを書くと,改行して表示されます.
print('Hello', 'Daniel', sep = ',', end = '!\n')
print('Hello', 'Daniel', sep = ',', end = '!\n')

以下のように表示されます.
Hello,Daniel!
Hello,Daniel!

改行の指示がない場合は,連続して表示されます.
print('Hello', 'Daniel', sep = ',', end = '!')
print('Hello', 'Daniel', sep = ',', end = '!')

以下のように表示されます.
Hello,Daniel!Hello,Daniel!


上記の頃柄のJupyter Notebookファイルはこちら(GutHub)で公開しています.

関連したPythonの基礎に関する投稿
変数宣言




2018年1月7日日曜日

[Python] 変数宣言

Pythonの変数宣言に関するメモです.

Pythonは変数の型を自動で認識します.
まずは,ターミナルで以下のようにPythonを立ち上げます.
$ Python3

インタープリンタで以下のように変数を宣言します.
>>> num = 1       # Integer type
>>> name = 'Mike' # Stribgs type
>>> is_ok = True  # Boolean type

定義した変数を表示してみます.
>>> print(num)
1
>>> print(name)
Mike
>>> print(is_ok)
True
>>> 

このように,特に変数の型を宣言しなくてもPythonの方で自動で識別してくれます.非常に便利ですが,バグの原因にもなるので,以下のように変数の型を記載しながら書くこともできます.このように書けばコードを読む際に変数の型がわかるので便利ですが,あまりこの記載方法は採用されていないようです.
>>> num2: int = 2
>>> name2: str = 'John'
>>> 
>>> print(num2)
2
>>> print(name2)
John

変数の型を調べるときには,以下のように"type"関数を使用します.
>>> print(num, type(num))
1 <class 'int'>
>>> print(name, type(name))
Mike <class 'str'>
>>> print(is_ok, type(is_ok))
True <class 'bool'>

また,一度定義した変数を書き換えると,その型も自動で変更されます.
>>> num3 = 3
>>> name3 = 'James'
>>> 
>>> print(num3, type(num3))
3 <class 'int'>
>>> 
>>> num3 = name3
>>> print(num3, type(num3))
James <class 'str'>
上記の例では当初,変数 num3 にはInteger型の 3 が入っています.実際にnum3の型を調べると,'int' と返ってきていることがわかります.その上で,num3 に name3 を代入して num3 を表示して型を調べると James と表示され,Strings型だと返ってきています.

さらに,型の変換も可能です.以下に,Strings型の数字で定義した変数をInteger型に書き換える例を示します.
>>> name4 = '4' # Strings type
>>> new_num = int(name4)
>>> 
>>> print(new_num, type(new_num))
4 <class 'int'>
最初に宣言した name4 にはStrings型の4が入っていますが,new_numという変数に int(name4) を入れることでInteger型に変換されています.

変数の宣言の際の注意点としては,
  • 変数名の最初の文字に数字を使うことはできない.
  • 予約されている文字列(例えば,if)を変数名として使うことはできない
ことが挙げられます.

上記の頃柄のJupyter Notebookファイルはこちら(GutHub)で公開しています.