茨の道も一歩から

インフラ構築からプログラミング(Python・JavaScript)までITに関するブログです。

Python入門:リスト

List


list1 = ['aaa', 'bbb', 'ccc', 100, 1234]

追加


append

list1.append('ddd') # ['aaa', 'bbb', 'ccc', 100, 1234, 'ddd']

insert

list1.insert(1,'eee') # ['aaa', 'eee', 'bbb', 'ccc', 100, 1234, 'ddd']

extend

list2 = ['xxx', 'yyy']
list2.extend(list1) # ['xxx', 'yyy', 'aaa', 'eee', 'bbb', 'ccc', 100, 1234, 'ddd']

削除


pop

list1.pop(3) # 'ccc'
print(list1) # ['aaa', 'eee', 'bbb', 100, 1234, 'ddd']

list1.pop() # 'ddd'
print(list1) # ['aaa', 'eee', 'bbb', 100, 1234]

remove

list1.remove('eee') # 'eee'
print(list1) # ['aaa', 'bbb', 100, 1234]

del

del list1[2] # 100
print(list1) # ['aaa', 'bbb', 1234]

clear

list1.clear()
print(list1) # []

複製(copy)


list1 = ['aaa', 'bbb', 'ccc', 100, 1234]
list2 = list1.copy()

print(list2) # ['aaa', 'bbb', 'ccc', 100, 1234]
print(id(list1)) # 28024104
print(id(list2)) # 28024008 list1とは違うid

NGなコピー

list10 = [1, 2, 3]
list11 = list10

print(list11) # [1, 2, 3]
print(id(list10)) # 28024168
print(id(list11)) # 28024168 list10と同じid

list11.append(4)
print(list11) # [1, 2, 3, 4]
print(list10) # [1, 2, 3, 4] list10にも追加されている

逆順(reverse)


list1 = ['aaa', 'bbb', 'ccc', 100, 1234]

list1.reverse()
print(list1) # [1234, 100, 'ccc', 'bbb', 'aaa']

x = list1[::-1]
print(x) # ['aaa', 'bbb', 'ccc', 100, 1234]
print(list1) # [1234, 100, 'ccc', 'bbb', 'aaa']

ソート

  • 違う型の混在リストはソート出来ない
  • ['aaa', 'bbb', 'ccc', 100, 1234] # 文字列と整数

sort

list1 = ['aaa', 'bbb', 'ccc', '100', '1234']

list1.sort()
print(list1) # ['100', '1234', 'aaa', 'bbb', 'ccc']

list1.sort(reverse=True)
print(list1) # ['ccc', 'bbb', 'aaa', '1234', '100']

sorted

x = sorted(list1)
print(list1) # ['aaa', 'bbb', 'ccc', '100', '1234']
print(x)  # ['100', '1234', 'aaa', 'bbb', 'ccc']

nesting


list33 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

print(list33[1]) # [4, 5, 6]
print(list33[1][2]) # 6

col2 = [row[1] for row in list33]
print(col2) # [2, 5, 8]
  
[list33[i][i] for i in range(len(list33))] # [1, 5, 9]

index


dogs = ['Pochi', 'Shiro', 'Jhon']
dogs.index('Shiro')
1

複数代入法


cat = ['Tama', 3, 'white']
name, age, color = cat

値渡しと参照渡し


l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
l3 = l1 + l2
print(l3) # [1, 2, 3, 4, 5, 6, 7, 8]

l3[0] = 10
print(l3) # [10, 2, 3, 4, 5, 6, 7, 8]
print(l1) # [1, 2, 3, 4]
print(l2) # [5, 6, 7, 8]

l4 = l1
l4[0] = 10
print(l4) # [10, 2, 3, 4]
print(l1) # [10, 2, 3, 4]

リスト内包表記


各数値を2倍する

nums = [1, 2, 3, 4, 5]
[num*2 for num in nums] # [2, 4, 6, 8, 10]

フラット化する

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[x for row in matrix for x in row] # [1, 2, 3, 4, 5, 6, 7, 8, 9]

行の合計が10より大きくて、要素が偶数である

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[x for x in row if x % 2 == 0] for row in matrix if sum(row) > 10] # [[4, 6], [8]]

行列変換

arrs = [[1, 2, 3], [4, 5, 6]]
[list(a) for a in zip(*arrs)] # [[1, 4], [2, 5], [3, 6]]

各要素がすべて真か判定

arrs = [1, 2, 3, 4, 5]
all(arrs) # True

arrs = [0, 1, 2, 3, 4]
all(arrs) # False

各要素のどれか1つが真か判定

arrs = [0, 1, 0]
any(arrs) # True

arrs = [0, 0.0, "", [], (), {}, False, None]
any(arrs) # False