iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
自我挑戰組

Discord-bot,從0開始到做出一個機器人系列 第 6

(),[] -- 列表與元組

序列

  • 索引

  • python比較神奇,可以從正面數或反著數,每一個位置都有自己的下標

  • 切片
    假設現在有一陣列

a = [1, 2, 3, 4, 5]
print(a[0:4:2])
# [1, 3, 5]
# a是陣列的名稱
# []裡面的第一個數字是起點(start)
# 第二個是終點(end)
# 第三個是間隔(step)
  • 相加 and 相乘
a = [1, 2]
b = [3, 4]
print(a + b)
# [1, 2, 3, 4]
  • 檢查某個值是否存在
a = [1, 3, 5]
print(5 in a)
# True
  • 長度、最大值、最小值
a = [1, 3, 5, 7, 9]
print(len(a), max(a), min(a))
# 5 9 1

陣列

  • 建立
# 直接創建
name = [element1, element2, ...]

# 創建空陣列
name = []

# 使用list()函數
nums = list(range(10))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 刪除
name = [1, 2]
del name

陣列查詢

name = [1, 2, 3]
print(name[2])
# 3

陣列遍歷

name = [1, 2, 3, 4]

# 使用for迴圈
for item in name:
    print(item, end = '')

# 使用for迴圈和enumerate()函數
for index, item in enumerate(name):
    print(index, item)

新增、修改、刪除元素

  • 新增
# append()是加在屁股後面的
name = [1, 2, 3]
name.append(4)
print(name)
# [1, 2, 3, 4]

# 也可以使用insert(),但效率不高,不推薦使用

# 使用extend()將2個陣列加在一起
name2 = [5, 6]
print(name.extend(name2))
[1, 2, 3, 4, 5, 6]
  • 修改元素
name = [0, 1, 3, 3]
name[2] = 2
print(name)
#[0, 1, 2, 3]
  • 刪除元素
name = [0, 1, 2, 3]

# 根據index值
del name[3]
# [0, 1, 2]

# 根據元素值
name.remove(2)
# [0, 1]

對陣列進行統計

  • 使用count()函數
nums = [0, 1, 1, 2, 3, 3]
print(nums.count(1))
# 2
  • 獲得指定元素第一次出現的位置
# index(object)
nums = [0, 1, 1, 2, 3]
answer = nums.index(1)
print(answer)
# 1
  • 統計數值和
# sum(listname[, start])
nums = [0, 1, 2, 3]
answer = sum(nums)
print(answer)
# 6

陣列排序

  • 使用sort()函數
# namelist.sort(key = None, reverse = True)
# key是比較的鍵(值)
# reverse則可指定是升序或降序

nums = [0, 5, 1, 2, 3, 4]

nums = nums.sort()
print(nums)
# [0, 1, 2, 3, 4, 5]

nums = nums.sort(reverse = False)
print(nums)
# [5, 4, 3, 2, 1, 0]
  • 使用sorted()函數
# 簡單明瞭的意思是把sort()反過來看就好
nums = [0, 2, 5, 6, 1]

nums = sorted(nums)
print(nums)
# [0, 1, 2, 5, 6]

陣列生成式

  • 生成式可快速生成一個陣列
# list = [表達式 for 循環變量 in range()]

nums = [i for i i in range(10)]
print(nums)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 根據陣列指定需求成新陣列
# list = [表達式 for 循環變量 in 原陣列]

nums = [0, 1, 2, 3]
new_nums = [x*0.5 for x in nums]
print(new_nums)
# [0.0, 0.5, 1.0, 1.5]
  • 選擇符合條件的元素生成新陣列
nums = [0, 1, 2, 3, 5, 9]
new_nums = [x for x in nums if x % 3 == 0]
print(new_nums)
# [0, 3, 9]

二維陣列

  • 定義二維陣列(下標位置)
# [[00, 01, 02, 03],
#  [10, 11, 12, 13],......]
  • 使用雙層for迴圈
test = []
for i in range(4):
    test.append([])
    for j in range(5):
        test[i].append(j)
print(test)
# [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
  • 使用陣列生成式創建
nums = [[i for i in range(5)] for j in range(4)]
print(nums)
# [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

創建元組

  • 使用賦值運算符直接創建
# 是(),不是[],[]是陣列非元組
nums = (1, 2, 3)

# 其實未必要用(),用 , 隔開就可以了
nums = '0', '1', '2'
print(nums)
# ('0', '1', '2')
  • 創建空元組
empty = ()
  • 建立data元組
# tuple(data)

nums = tuple(range(0, 5, 2))
print(nums)
# (0, 2, 4)

刪除元組

# 直接刪除即可

nums = (0, 1, 2)
del nums

尋找元組元素

nums = (0, 1, 2)
print(nums[0])
# 0

print(nums[0:2])
# (0, 1)
  • 這邊可以結合上面陣列的enumerate()函數進行遍歷元組

修改元組

  • 元組不能進行單個修改,所以......
nums = (0, 1, 2)
nums = (1, 2)
print(nums)
# (1, 2)

元組相加

  • 必須是元組加元組
nums = (0, 1, 2)
add_nums = (3, 4)
print(nums + add_nums)
# (0, 1, 2, 3, 4)

元組推導式

import random

nums = (random.randint(10, 100) for i in range(10))
print(nums)
# <generator object <genexpr> at 0x0000016C21DD8190>
  • 這邊還需要一個tuple,因為元組推導式生成的結果不是一個元組,所以還需要轉換

  • 加上

nums = tuple(nums)
print(nums)
# (24, 23, 59, 81, 35, 46, 18, 60, 89, 87)
  • 這邊可以用for遍歷,或是__next__()方法輸出元素
nums = (i for i in range(3))
print(nums.__next__())
# 0
print(nums.__next__())
# 1

陣列與元組的區別

  • 陣列可拿單獨的元素出來改寫,元組須整個替換
  • 陣列有append()、extend()、insert()、remove()、pop()等方法改寫,但元組都沒有
  • 兩者都支援slice,但元組不支援修改
  • 元組的速度比陣列快,不果資料不須更動,不進行修改,建議使用元組
  • 陣列不能作為字典的鍵,但元組可以

上一篇
流程控制
下一篇
字典與集合
系列文
Discord-bot,從0開始到做出一個機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言