まぬねこの足跡。。。

備忘録+たのしさ+ひっそりと

Python リスト(list)

概要

  • []で囲む
  • 複数のデータを要素としてまとめて取り扱うデータ
  • 構成要素:あらゆる型で混合してよい。
  • 他言語の配列に近い。
  • インデックスで要素を読書きできる。

‐ シーケンス型

money=1000
kaban=['財布','携帯',100]
bag = [10,'りんご', kaban,money]

print(bag)
print(type(bag))#データ型確認
bag[1]='みかん'
print(bag)

表示イメージ

[10, 'りんご', ['財布', '携帯', 100], 1000]
<class 'list'>
[10, 'みかん', ['財布', '携帯', 100], 1000]

インデックス

  • 0から始まる。基本, 左側に格納したデータから数える。
  • データの書換えが可能
  • 負のインデックス:後ろから数える。「-1」から始まる。
word=['a', 'b', 'c', 'd','e']
print(word[1])
print(word[-2])
word[1]='Z'
print(word)
word[3]='ZZZZ'
print(word)
print(type(word))#データ型確認

表示イメージ

b
d
['a', 'Z', 'c', 'd', 'e']
['a', 'Z', 'c', 'ZZZZ', 'e']
<class 'list'>

スライス

部分文字列を取得可能

文字変数名[ (開始) : (終了+1) ]

文字変数名[ (開始) : (終了+1) : 2(増分値) ]

  開始:省略時、0になる。
  終了+1:省略時、最大インデックスになる。
  増分値:省略時、1

word=['a', 'b', 'c', 'd','e','f','g','h','i','j','k']
print(word[1:4])
print(word[1:8:2])
print(word[:4])
print(word[5:])
word[1:4]='Z'
print(word)
word[1:4]='ZZZZZ'
print(word)
print(type(word))#データ型確認

表示イメージ

['b', 'c', 'd']
['b', 'd', 'f', 'h']
['a', 'b', 'c', 'd']
['f', 'g', 'h', 'i', 'j', 'k']
['a', 'Z', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
['a', 'Z', 'Z', 'Z', 'Z', 'Z', 'g', 'h', 'i', 'j', 'k']
<class 'list'>

多重リスト

リスト内にリスト。

nums_strgs = [[1, 2, 3], [10, 20, 30], ['a', 'b', 'c']]
print(nums_strgs)
print(nums_strgs[1])
print(nums_strgs[1][2])
nums_strgs[1][2]='AAA'
print(nums_strgs)
nums_strgs[1]=[11,22]
print(nums_strgs)

表示イメージ

[[1, 2, 3], [10, 20, 30], ['a', 'b', 'c']]
[10, 20, 30]
30
[[1, 2, 3], [10, 20, 'AAA'], ['a', 'b', 'c']]
[[1, 2, 3], [11, 22], ['a', 'b', 'c']]

リスト→新リスト 内包表記

シーケンスや iterableの要素に条件で絞ったり、要素を加工して新たなリストを生成。

基本

[ 要素加工 for 要素 in iterable ]

[x**2 for x in range(10)]

表示イメージ

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

複数のリストから要素を取得

[ 要素A,B...加工 for 要素A in iterableA for 要素B in iterableB ...]

[(x, y) for x in [1,2,3] for y in [3,1,4]]

表示イメージ

[(1, 3), (1, 1), (1, 4), (2, 3), (2, 1), (2, 4), (3, 3), (3, 1), (3, 4)]

条件で絞る

[ True要素の加工 for 要素 in iterable if 要素条件]

nums = [1,2,None,3,4,5]
[num for num in nums if num != None]

表示イメージ

[1, 2, 3, 4, 5]

入れ子(ネスト)・・・多次元リストを生成

[ [ 要素A,B...加工 for 要素A in iterableA ] (1次元(行)) for 要素B in iterableB ]
                              (2次元(列))

nums = [1,2,None,3,4,5]
rows = ['a', 'b', 'c', 'd', 'e']
[[row+str(col) for row in rows] for col in range(4)]

表示イメージ

[['a0', 'b0', 'c0', 'd0', 'e0'],
 ['a1', 'b1', 'c1', 'd1', 'e1'],
 ['a2', 'b2', 'c2', 'd2', 'e2'],
 ['a3', 'b3', 'c3', 'd3', 'e3']]

リスト→セット(集合) 内包表記

シーケンスや iterableの要素に条件で絞ったり、要素を加工して新たなセット(集合)を生成。

基本

{ 要素加工 for 要素 in iterable }

nums = [1,2,None,3,4,5]
sets={num for num in nums if num != None}
print(sets)

表示イメージ

{1, 2, 3, 4, 5}

リスト→辞書 内包表記

シーケンスや iterableの要素に条件で絞ったり、要素を加工して新たな辞書型を生成。

基本

{ 要素加工 for 要素 in iterable }

animals = ['cat', None,'dog', 'bird', 'horse']
animals_dic={animal:len(animal) for animal in animals if animal != None}
print(animals_dic)

表示イメージ

{'cat': 3, 'dog': 3, 'bird': 4, 'horse': 5}


演算子

演算子「+」

リストの連結

word=[1,2,3,4,5]
print(word+['a', 'b', 'c', 'd','e'])

表示イメージ

[1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 'e']

演算子「*」

パターンA

word=[1,2,3,4,5]
print(word*3)
表示イメージ
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

パターンA

words= [[0, 1], [2, 3]]
lis = words*5
print(lis)
words[0][0] = 'AA' #参照渡しなので「*5」分、全部変わる
print(lis)
表示イメージ
[[0, 1], [2, 3], [0, 1], [2, 3], [0, 1], [2, 3], [0, 1], [2, 3], [0, 1], [2, 3]]
[['AA', 1], [2, 3], ['AA', 1], [2, 3], ['AA', 1], [2, 3], ['AA', 1], [2, 3], ['AA', 1], [2, 3]]

演算子「in」

word=[1,2,3,4,5]
print(1 in [1,2,3])
print(1 in word)
print(5 in [1,2,3])
print(5 in word)

表示イメージ

True
True
False
True

演算子「not in」

word=[1,2,3,4,5]
print(1 not in [1,2,3])
print(1 not in word)
print(5 not in [1,2,3])
print(5 not in word)

表示イメージ

False
False
True
False

関数・メソッド

素数 len関数

len(list)

word=[1,2,3,4,5]
print(len(word))

表示イメージ

5

最大値 max関数

max(list)

word=[1,2,3,4,5]
print(max(word))

表示イメージ

5

最小値 min関数

min(list)

word=[1,2,3,4,5]
print(min(word))

表示イメージ

1

総和 sum関数

sum(list)

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

表示イメージ

15

インデックス番号 indexメソッド

list.index(要素)

word=['a', 'b', 'c', 'd','e']
print(word.index('c'))

表示イメージ

2

並べ替え

ちょこっとメモ

破壊的

元のデータを変える。

非破壊的

元のデータは、変えない。

sort メソッド (破壊的)

sort(*, key=None, reverse=False)

reverse:Trueで降順

word=['z', 'c', 'f', '2','d','1']
word.sort()
print(word)
word.sort(reverse = True)
print(word)
表示イメージ
['1', '2', 'c', 'd', 'f', 'z']
['z', 'f', 'd', 'c', '2', '1']

sorted 組込み関数 (非破壊的)

sorted(iterable, /, *, key=None, reverse=False)

reverse:Trueで降順

word=['z', 'c', 'f', '2','d','1']
print(sorted(word))
print(word)
print(sorted(word,reverse = True))
print(word)

表示イメージ

['1', '2', 'c', 'd', 'f', 'z']
['z', 'c', 'f', '2', 'd', '1']
['z', 'f', 'd', 'c', '2', '1']
['z', 'c', 'f', '2', 'd', '1']

要素追加 append(x)メソッド

list.append(x)

x:追加する要素

word=['a','b']
word.append(11)
print(word)

表示イメージ

['a', 'b', 11]

要素挿入 insertメソッド

list.insert(i, x)

i:インデックス番号
x:要素内容
s += t と同一

word=['a', 'b', 'c', 'd','e']
word.insert(3,'ZZ')
print(word)

表示イメージ

['a', 'b', 'c', 'ZZ', 'd', 'e']

要素削除

要素内容で削除 removeメソッド

list.remove(x)

word=['a', 'b', 'c', 'd','e']
word.remove('c')
print(word)
表示イメージ
['a', 'b', 'd', 'e']

インデックス番号で削除+取得 popメソッド

list.pop(i)

i:省略時、末尾を削除+取得
※スタックとして使える。(last-in, first-out)

word=['a', 'b', 'c', 'd','e']
print(word.pop(2))
print(word)
print(word.pop())
print(word)
表示イメージ
c
['a', 'b', 'd', 'e']
e
['a', 'b', 'd']
リストの先頭要素の削除+取得 collections.deque

キューとして使える。(first-in, first-out)

from collections import deque

word=deque(['a', 'b', 'c', 'd','e'])
print(word.popleft())
print(word)

表示イメージ

a
deque(['b', 'c', 'd', 'e'])

インデックス番号で削除 del文

del list[x]

x:インデックス番号
スライスも可能

word=['a', 'b', 'c', 'd','e']
del word[1]
print(word)
word=['a', 'b', 'c', 'd','e']
del word[1:3]
print(word)
表示イメージ
['a', 'c', 'd', 'e']
['a', 'd', 'e']

要素逆順 reverseメソッド

list.reverse()

word=['a', 'b', 'c', 'd','e']
word.reverse()
print(word)

表示イメージ

['e', 'd', 'c', 'b', 'a']

要素copy メソッド

list.copy()

word=['a', 'b', 'c', 'd','e']
copy_word=word.copy()
print(word)
print(copy_word)

表示イメージ

['a', 'b', 'c', 'd', 'e']
['a', 'b', 'c', 'd', 'e']

文字列→リスト 変換

区切り文字利用 splitメソッド

str.split(sep=None, maxsplit=- 1):前から、文字列分割

文字結合利用 joinメソッド

str.join(iterable):文字列結合