事務屋さんの備忘録

主にプログラミングのことを書いていきます。メモというか備忘録的な感じで。プログラミングといっても、私はプロのエンジニアでも本職のプログラマーでもありません。単なる事務職をやってるサラリーマンで、空いた時間にちょこちょこっとプログラミングしてる程度です。よってこのブログに記載したことが誤っていたり、もっとよい方法がある場合もあると思います。その場合には、ご指摘いただけると嬉しいです。また、このブログを読んで役に立った、なんて方がいらっしゃったら幸いですね。

Python 基礎その5 リスト

メモ。リストいろいろ。

#Test1
numbers=[4,8,15,16,23,42]
colors=["red","green","blue"]
print(numbers)
print(colors)

print("-" *5)

#Test2
a=10
b=20
c=30
abc=[a,b,c]
print(abc)

print("-" *5)

#Test3
a=10
b=20
c=30
abc=[a,b,c]
b=99 #bの値を変更してもリスト内の値は変化しません
print(abc)

print("-" *5)

#Test4
#型は混在できます
mixture=[20,30,"dog","cat",True,False]
print(mixture)

print("-" *5)

#Test5
#途中で改行可能 コメントも可能
data=[
    11,22,33,44,55, #コメント1
    66,77,          #コメント2
    88,99,100
]
print(data)

print("-" *5)

#Test6
#要素を繰り返すリストを作ります
nums=[0]*5
print(nums)

strs=["xyz"]*5
print(strs)

data=[1,2,3]
data*=5
print(data)

print("-" *5)

#Test7
#リストを使う
thelist=list(range(-5, 6)) #-5~5までのリスト
print(thelist)

#偶数のリスト
evenlist=list(range(0, 10, 2))
print(evenlist)

#奇数のリスト
oddlist=list(range(1, 10, 2))
print(oddlist)

#3倍のリスト
list_x3=list(range(0, 20, 3))
print(list_x3)

#文字列をリストに分ける
list_happy=list("happy")
print(list_happy) #1文字ずつに分割されたリストになります

week=list("日月火水木金土")
print(week)

#空のリストを作る
newlist=list()
print(newlist)

print("-" *5)

#リストの参照
colors=["blue","red","green","yellow"]
print(colors[0]) #先頭の要素
print(colors[1])
print(colors[2])
print(colors[3])
print(colors[-1]) #末尾の要素
print(colors[-2])

print("-" *5)

#多重リスト
list_a=[["apple","peach","orange"], ["cabbage","carrot","potato"]]
print(list_a[1][0]) #2番目のリストの最初の要素


r101="佐藤"
r102="田中"
r103="鈴木"
r201="青木"
r202="広田"
r203="野村"
floor1=[r101,r102,r103]
floor2=[r201,r202,r203]
apartment=[floor1,floor2]
print(apartment)
print(apartment[0][1]) #1番目のリストの2個目を取り出す

apartment[1][2]="マイケル" #2番目のリストの3個目の要素を書き換える
print(apartment[1])


#リストの末尾に値を追加する
data=[] #空のリストを作っておく
data.append(10)
data.append(20)
print(data)
data.append(30)
print(data)

#リストに値を挿入する
data=["a","b","c","d","e","f"]
print(data)
data.insert(3,"new") #インデックス3の位置に"new"という値を挿入する
print(data)

#リストから要素を削除する
#popは削除と同時に削除した要素を返す
fruits=["apple","orange","banana","peach"]
print("削除前",fruits)
delete_dessert=fruits.pop() #末尾の要素を抜き出し、変数に格納
print(delete_dessert)
print("削除後",fruits)

#指定の位置にある要素を抜き取る
fruits=["apple","orange","banana","peach"]
print("削除前",fruits)
delete_dessert=fruits.pop(0) #先頭の要素を抜き出し、変数に格納
print(delete_dessert)
print("削除後",fruits)

#リストに削除したい値が含まれていたら削除する
colors=["blue","red","green","yellow"]
print("削除前",colors)
target="yellow"
if target in colors:
    colors.remove(target)
print("削除後",colors)

#リストに削除したい値が含まれていたら削除する
colors=["blue","red","green","yellow","red"]
print("削除前",colors)
target="red"
while target in colors: #targetが含まれている間は繰り返し削除します
    colors.remove(target)
print("削除後",colors)

print("-" *5)


#空白で区切られている単語をリスト化する
message="may the force be with you!"
words=message.split() #初期値では空白がセパレータ
print(words)

#カンマで区切られた単語をリスト化する
fruits="apple, orange, banana, peach"
fruits_list=fruits.split(",")
print(fruits_list) #単語の前後に空白がある['apple', ' orange', ' banana', ' peach']

fruits="apple, orange, banana, peach"
fruits_list=fruits.split(", ") #カンマと空白を合わせてセパレータとします
print(fruits_list) #['apple', 'orange', 'banana', 'peach']

#事前に空白を取り除いてから分割する replace
fruits="apple, orange, banana, peach"
fruits=fruits.replace(" ","") #半角スペース削除
fruits_list=fruits.split(",") 
print(fruits_list) #['apple', 'orange', 'banana', 'peach']


#分割回数を指定する
result="23,45,56,87,90,123,231,256,321"
result=result.split(",",3) #先頭から3要素のみ分割
print(result) #['23', '45', '56', '87,90,123,231,256,321']

result="23,45,56,87,90,123,231,256,321"
result=result.split(",",3)[:3] #先頭から3要素のみ分割した後、その3要素のみ取得
print(result) #['23', '45', '56']


#リスト要素を連結して文字列を作る join
members=["Tom","Jerry","Spike"]
name_join=" and ".join(members)
print(name_join)

print("-" *5)


#リストをスライスする
colors=["blue","red","green","yellow","pink","black","white"]
print(colors[:]) #全部
print(colors[3:]) #インデックス3から最後まで
print(colors[:3]) #先頭からインデックス2まで
print(colors[3:6]) #インデックス3からインデックス5まで

data=[10,21,35,49,51,60,77,81,92,100]
n=3 #分割する位置
data1=data[:n] #最初からn-1まで
data2=data[n:] #nから最後まで
print(data1)
print(data2)

#要素を1個飛ばしで取り出す
letters=["a","b","c","d","e","f","g","h","i","j"]
print(letters[::2]) #先頭から1個飛ばし ['a', 'c', 'e', 'g', 'i']
print(letters[1::2]) #2個目から1個飛ばし ['b', 'd', 'f', 'h', 'j']


#同じ値か確認する
color_a=["green","blue","red"]
color_b=["green","blue","red"]
color_c=["green","red","blue"]
print(color_a == color_b) #True
print(color_a == color_c) #False


#代入の注意点 メモリの同じ場所を参照している
color_a=["green","blue","red"]
color_b=color_a #代入する
print(color_b)
print(color_a == color_b) #True
color_a.append("white")
print(color_a)
print(color_b) #['green', 'blue', 'red', 'white'] color_b側にも white がある


#リストの複製
list_mother=[10,20,30,40,50]
list_work=list_mother.copy() #リストを複製 copy()
print(list_work) #[10, 20, 30, 40, 50]
print(list_mother is list_work) #False 値は同じだが別のオブジェクト

#スライスで複製する
list_mother=[10,20,30,40,50]
list_work=list_mother[:] #リストを複製 [:]
print(list_work) #[10, 20, 30, 40, 50]
print(list_mother is list_work) #False 値は同じだが別のオブジェクト

#listで複製する
list_mother=[10,20,30,40,50]
list_work=list(list_mother) #リストを複製 list()
print(list_work) #[10, 20, 30, 40, 50]
print(list_mother is list_work) #False 値は同じだが別のオブジェクト



#リストをソートする
numbers=[15,23,4,42,8,16]
numbers.sort() #昇順ソート
print(numbers) #[4, 8, 15, 16, 23, 42]

numbers.sort(reverse = True) #降順ソート
print(numbers) #[42, 23, 16, 15, 8, 4]


#ソートした新しいリストを作る
numbers=[15,23,4,42,8,16]
numbers_ascend=sorted(numbers) #複製して昇順ソート
print(numbers_ascend) #[4, 8, 15, 16, 23, 42]
print(numbers) #[15, 23, 4, 42, 8, 16]

numbers_descend=sorted(numbers,reverse=True) #複製して降順ソート
print(numbers_descend) #[42, 23, 16, 15, 8, 4]
print(numbers) #[15, 23, 4, 42, 8, 16]


#リストを逆順に並べる
numbers=[15,23,4,42,8,16]
numbers.reverse() #逆順に並び替え
print(numbers) #[16, 8, 42, 4, 23, 15]


#ソートで使う比較関数を指定する
#文字列の長さでソートする
words=["chest","wind","holiday","knight","silence","hot"]
words.sort(key=len)
print(words) #['hot', 'wind', 'chest', 'knight', 'holiday', 'silence']

#英語の大文字、小文字を区別せずにソートする
words=["peach","ver3","Python","Pokemon","ver2"]
new_words=sorted(words,key=str.lower)
print(new_words) #['peach', 'Pokemon', 'Python', 'ver2', 'ver3']


#リストから値を取り出す
#全ての要素を順に取り出す
names=["鈴木","田中","栗林","山岡"]
for who in names:
    print(who + "さん")
    
print("-" *5)

#ループカウンタを付ける
names=["鈴木","田中","栗林","山岡"]
for i,who in enumerate(names,1): #1からのカウント
    print(f"{i}:{who}さん")
"""
1:鈴木さん
2:田中さん
3:栗林さん
4:山岡さん
"""

#複数のリストを対象にする
name1=["鈴木","田中","赤尾","佐々木","高岡"]
name2=["星奈","夕美","恵子","梨花","幸恵"]
long_name=[]
for n1,n2 in zip(name1,name2): #2つのリストを同時に操作します
    long_name.append(n1+n2) #名前を連結してリストに追加します
print(long_name) #['鈴木星奈', '田中夕美', '赤尾恵子', '佐々木梨花', '高岡幸恵']


#リスト内包表記
nums=[1,2,3,4,5,6]
nums_double=[num*2 for num in nums] #numsから取り出した値を2倍したリストを作成
print(nums_double) #[2, 4, 6, 8, 10, 12]

#数値を整数に切り捨てたリストを作成
import math
num_list=[5.1, 4.3, 8.2, 6.3, 9.6, 10.2, 2.3]
result=[math.floor(num) for num in num_list] #floor 切り捨て
print(result) #[5, 4, 8, 6, 9, 10, 2]

#リスト内包表記でzip()使って2つのリストを連結する
name1=["鈴木","田中","赤尾","佐々木","高岡"]
name2=["星奈","夕美","恵子","梨花","幸恵"]
long_name=[n1+n2 for n1,n2 in zip(name1,name2)]
print(long_name) #['鈴木星奈', '田中夕美', '赤尾恵子', '佐々木梨花', '高岡幸恵']

#条件式付きのリスト内包表記
numbers=[2.1, 0.2, 0.3, 1.4, 3.1, 0.3, 1.6]
result=[num for num in numbers if 1<=num<2] #1以上2未満の数値を取り出します
print(result) #[1.4, 1.6]

#数値以外の値を取り除く
numbers=[2.1, 4, "", 2.2, "1", 3]
#int,floatの数値だけを取り出します
numbers=[num for num in numbers if isinstance(num, (int,float))]
print(numbers) #[2.1, 4, 2.2, 3]

#複数の条件式
numbers=[4, 12, 21, 32, 8, 6, 11, 6]
result=[num for num in numbers if num>=5 if num%2==0] #5以上の偶数
print(result) #[12, 32, 8, 6, 6]

#for in を複数含める
data=[[1,2,3,4], [5,6], [7,8,9]]
#for alist in data 外側のネスト
#for num in alist 内側のネスト
result=[num*2 for alist in data for num in alist] #要素の値を2倍
print(result) #[2, 4, 6, 8, 10, 12, 14, 16, 18]

#元のネスティングを保ったままで要素の値を2倍にしたリストを作成
data=[[1,2,3,4], [5,6], [7,8,9]]
#for alist in data 外側のネスト
#for num in alist 内側のネスト
result=[[num*2 for num in alist] for alist in data] #要素の値を2倍
print(result) #[[2, 4, 6, 8], [10, 12], [14, 16, 18]]


#リストを検索する
#値が含まれているかどうか
colors=["blue","red","green","yellow"]
print("green" in colors) #True
print("black" in colors) #False

names=["鈴木裕子","田中里美","桜木啓太"]
print("田中" in names) #False

name="田中"
result=False
for item in names:
    if name in item: #namesから取り出した要素を調べる 文字列なら判定可能
        result=True
        break #見つかったらループを抜ける
print(result) #True


#みつかった位置を返す
id_list=["a","b","c","d"]
print(id_list.index("b")) #1


#みつかった個数を返す
numbers=[1,3,4,5,5,15,12,57]
print(numbers.count(5)) #2


#リストから要素をランダムに取り出す
import random
fruits=["apple","orange","banana","peach"]
dessert=random.choice(fruits) #実行する度にリストから1つ選ばれる
print(dessert)

#secretsモジュールのchoice()も同じ
import secrets
dessert=secrets.choice(fruits) #実行する度にリストから1つ選ばれる
print(dessert)


#合計、最大値、最小値
data=[56,45,83,67,59,41,77]
print(sum(data)) #合計  428
print(max(data)) #最大値  83
print(min(data)) #最小値  41