1.5 変数とデータの型¶
多くのプログラミング言語では、変数を使用する前に宣言する必要があり、データの型を指定しなければならないが、Pythonにそのような制約はない。
In [1]:
#変数aに整数の2を代入
a = 2
#変数bに整数の5を代入
b = 5
#変数cにaとbを足したものを代入
c = a + b
#変数dに少数点以下を含む数値を代入
d = 1.05
#変数eに文字列”Noel”を代入
e = "Noel"
#変数aの型を出力
type(a)
Out[1]:
int
データの型が異なると演算の意味も異なる。
In [3]:
# 文字列の足し算
x = '1'
y = "6"
z = x + y
z
Out[3]:
'16'
In [4]:
# 算術演算
a += b # aとbを足した結果をaに代入
a -= b # aからbをひいた結果をaに代入
a *= b # aにbをかけけた結果をaに代入
a / b # aをbでわった結果をaに代入
a ** b # aのb乗をaに代入
Out[4]:
100000
1.6 データ構造¶
1.6.1 リスト¶
- リストの基本操作とメソッドを確認します。
In [1]:
L = ["オレンジ", "パパイヤ","マンゴー"]
要素を取り出す
In [2]:
# リスト名[要素番号]
L[1]
Out[2]:
'パパイヤ'
In [3]:
# 複数の要素の場合
L[0:2]
Out[3]:
['オレンジ', 'パパイヤ']
要素の置き換え
In [4]:
L[1] = "ライチ"
L
Out[4]:
['オレンジ', 'ライチ', 'マンゴー']
要素の削除
In [5]:
# del リスト[要素番号]
del L[1]
L
Out[5]:
['オレンジ', 'マンゴー']
リストの連結
In [6]:
# リスト + リスト
M = ["キャベツ","トマト","カリフラワー"]
L + M # 保存されない
Out[6]:
['オレンジ', 'マンゴー', 'キャベツ', 'トマト', 'カリフラワー']
要素の追加
In [14]:
# リスト.append(注: 複数要素はappendできない)
A = ["ライオン","カバ","キリン"]
A.append("ゾウ")
A
Out[14]:
['ライオン', 'カバ', 'キリン', 'ゾウ']
リストへリストを追加する
In [15]:
B = ["クジラ","イルカ"]
A.extend(B)
A
Out[15]:
['ライオン', 'カバ', 'キリン', 'ゾウ', 'クジラ', 'イルカ']
要素の挿入
In [16]:
# リスト.insert(位置, 追加する要素)
A.insert(1,"オカピ")
A
Out[16]:
['ライオン', 'オカピ', 'カバ', 'キリン', 'ゾウ', 'クジラ', 'イルカ']
要素の削除
In [17]:
# 要素を指定して削除
A.remove("カバ")
A
Out[17]:
['ライオン', 'オカピ', 'キリン', 'ゾウ', 'クジラ', 'イルカ']
In [18]:
# 要素番号を指定して削除
del A[0]
A
Out[18]:
['オカピ', 'キリン', 'ゾウ', 'クジラ', 'イルカ']
In [19]:
# 指定した要素番号の要素を削除して出力
A.pop(-1)
Out[19]:
'イルカ'
要素番号の取得
In [20]:
A.index("ゾウ")
Out[20]:
2
要素の存在確認
In [21]:
"キリン" in A
Out[21]:
True
要素の並べ替え
In [23]:
S = ["India","Hotel","Fox","Delta","Alpha","Charie","Bravo","Echo","Golf"]
In [24]:
# 非破壊
sorted(S)
Out[24]:
['Alpha', 'Bravo', 'Charie', 'Delta', 'Echo', 'Fox', 'Golf', 'Hotel', 'India']
In [25]:
S
Out[25]:
['India', 'Hotel', 'Fox', 'Delta', 'Alpha', 'Charie', 'Bravo', 'Echo', 'Golf']
In [26]:
# 破壊
S.sort()
In [27]:
S
Out[27]:
['Alpha', 'Bravo', 'Charie', 'Delta', 'Echo', 'Fox', 'Golf', 'Hotel', 'India']
emumerate
In [16]:
# 要素の順番と値を返す
L = [10,25,30]
for i, v in enumerate(L):
print(i,v)
0 10 1 25 2 30
In [17]:
# range関数
#0からn-1の整数列
r = range(5)
list(r)
Out[17]:
[0, 1, 2, 3, 4]
1.6.2 内包表記¶
リストや辞書などのループ処理を短く書く記法。
In [20]:
# forで書くと
L = ["pen","apple","grape"]
M = []
for i in L:
M.append(i+"s")
M
Out[20]:
['pens', 'apples', 'grapes']
In [21]:
L = ["pen","apple","grape"]
N = [i + "s" for i in L]
N
Out[21]:
['pens', 'apples', 'grapes']
In [22]:
# Lの中の単語でXにある単語だけPに保存
L = ["pen","apple","book"]
X = ["pen","eraser","book","pencil"]
P = [i for i in L if i in X]
P
Out[22]:
['pen', 'book']
In [36]:
(10**10-1)/9
Out[36]:
1111111111.0
1.6.3 タプル¶
タプルとは()で括った構造。リストと似ているが、1度作ったタプルは変更できない。
In [5]:
T = (1,2,3,4,5)
In [6]:
T.append(6)
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-6-ecbdb13d2d18> in <module> ----> 1 T.append(6) AttributeError: 'tuple' object has no attribute 'append'
1.6.4 セット¶
順番が保持さない、重複要素が削除されるリスト
In [7]:
S = set([1,2,2,2,4,4,5])
S
Out[7]:
{1, 2, 4, 5}
In [8]:
# 要素の追加
S.add(9)
S
Out[8]:
{1, 2, 4, 5, 9}
In [58]:
# 和集合1
A = {1,2,3}
B = {3,4,5}
A | B
Out[58]:
{1, 2, 3, 4, 5}
In [56]:
# 和集合2
D = {1,2,3}
E = {3,4,5}
D.union(E)
Out[56]:
{1, 2, 3, 4, 5}
In [57]:
# 積集合1
A & B
Out[57]:
{3}
In [59]:
A.intersection(B)
Out[59]:
{3}
In [61]:
# 差集合1
A - B
Out[61]:
{1, 2}
In [62]:
# 差集合2
A.difference(B)
Out[62]:
{1, 2}
In [63]:
# 排他的論理和1
A ^ B
Out[63]:
{1, 2, 4, 5}
In [64]:
# 排他的論理和2
A.symmetric_difference(B)
Out[64]:
{1, 2, 4, 5}
1.6.5 ディクショナリ¶
- ひとつの要素にキーと値がある。
順番が保持されない。
In [9]:
# ディクショナリの生成
D = {"S001":25,"S002":40,"S003":50}
In [10]:
# 値の取り出し
D["S002"]
Out[10]:
40
In [11]:
# 要素の追加
D["S004"] = 90
In [12]:
# keyの取得
D.keys()
Out[12]:
dict_keys(['S001', 'S002', 'S003', 'S004'])
In [13]:
# 値の取得
D.values()
Out[13]:
dict_values([25, 40, 50, 90])
In [14]:
# 以下のようにすると全ての値が取得できる
for i in D.keys():
print(D[i])
25 40 50 90
In [15]:
# 両方同時に
for k,v in D.items():
print(k,v)
# 順番は保持されない
S001 25 S002 40 S003 50 S004 90
練習問題¶
1, 11, 111,1111のようにすべての桁の数字が1である自然数をレピュニット(数)と言い、1番目のレピュニットを$R_1 = 1$、2番目を$R_2 = 11$と表します。$R_2$から$R_{10}$までを出力しなさい。
以下のように1を文字列として扱うことはできません。
In [43]:
n = "1"
for i in range(1,11):
print(n * i)
1 11 111 1111 11111 111111 1111111 11111111 111111111 1111111111