學習目標
# 列表的複製
x = [100, 200, 300]
y = x # x和y指向了同一個記憶體空間,會相互影響,等號是記憶體地址的賦值
# 呼叫copy方法,可以複製一個列表
# 這個新列表和原有的列表內容一樣,但是指向不同的記憶體空間
z = x.copy()
print('z', z) # z [100, 200, 300]
x[0] = 1
print('y', y) # y [1, 200, 300]
print('x', x) # x [1, 200, 300]
# 呼叫copy方法,可以複製一個列表
# 這個新列表和原有的列表內容一樣,但是指向不同的記憶體空間
# 也就是說,我們想把x列表的內容給y,但是又不想y的內容受到後續x的影響,就使用copy()方法
# 也就是隻把當前x的值給y,至於後來x怎麼變化對y沒有影響
# 除了使用列表自帶的copy方法意外,還可以使用copy模組實現拷貝
import copy # 報錯,TypeError: copy() missing 1 required positional argument: 'x'
# a1 = copy.copy() # 效果等價於x.copy(),都是一個淺拷貝
a2 = x.copy()
# print(a1)
print('a2', a2) # a2 [1, 200, 300]
# 切片其實就是一個淺拷貝
name1 = ['zhangsan', 'lisi', 'wangwu']
name2 = name1[::]
print(name1, name2) # ['zhangsan', 'lisi', 'wangwu'] ['zhangsan', 'lisi', 'wangwu']
name1[0] = 'Tom'
print(name2) #['zhangsan', 'lisi', 'wangwu']
# 那什麼是淺拷貝什麼是深拷貝
# 淺拷貝我們理解爲淺層次的拷貝,就是我拷過來就完了,至於後邊怎麼變,與我無關
# 深拷貝正好與淺拷貝相反,你只要吃了我的,以後一輩子都欠我的,一輩子受影響
想要替換程式碼中一個變數的所有名稱
就能實現所有變數名稱的替換
# 有一個列表names,儲存了一組姓名names = ['zhangsan','lisi','chris','jerry','henry']
# 再讓使用者輸入一個姓名,如果這個人姓名在列表裏存在,提示使用者姓名已存在,
# 如果這個姓名在列表裏不存在,就將這個姓名新增到列表裏。
#
# names = ['zhangsan', 'lisi', 'chris', 'jerry', 'henry']
# username = input('請輸入使用者名稱:')
# if username in names:
# print('使用者名稱已存在')
# else:
# names.append(username)
#
# print(names)
# 請輸入使用者名稱:jjjjj
# ['zhangsan', 'lisi', 'chris', 'jerry', 'henry', 'jjjjj']
# --------------------------------------------------------------
# for name in names:
# if username == name:
# print('使用者名稱已存在')
# break
# else:
# names.append(username)
# print(names)
# -------------------------------------
# 氣泡排序優化
# nums = [6, 5, 3, 1, 8, 7, 2, 4]
# count = 0
# j = 0
# # 第一趟,比較時,j = 0多比較了0次
# # 第二趟,比較時,j = 1多比較了1次
# while j < len(nums) - 1:
#
# i = 0
# while i < len(nums) - 1 - j:
# count += 1
# if nums[i] > nums[i + 1]:
# nums[i], nums[i+1] = nums[i+1], nums[i]
# i += 1
# j += 1
# print(nums) # [1, 2, 3, 4, 5, 6, 7, 8]
# print('比較次數:', count) # 比較次數: 28 (1+2+3+4+5+6+7)
nums = [6, 5, 3, 1, 8, 7, 2, 4]
count = 0
j = 0
# 第一趟,比較時,j = 0多比較了0次
# 第二趟,比較時,j = 1多比較了1次
while j < len(nums) - 1:
# 在每一趟裡都定義一個flag
flag = True # 假設每一趟都沒有換行
i = 0
while i < len(nums) - 1 - j:
count += 1
if nums[i] > nums[i + 1]:
# 只要交換了,flag就不成立
flag = False
nums[i], nums[i+1] = nums[i+1], nums[i]
i += 1
if flag :
# 這一趟走完之後,flag依然是True,說明這一趟沒有進行過數據交換
break
j += 1
print(nums) # [1, 2, 3, 4, 5, 6, 7, 8]
print('比較次數:', count) # 比較次數: 28 (2+3+4+5+6+7)
# 在最後一趟所有數據都已經有序了,不許要再比較了,省去了1和2 的比較這一次
# 氣泡排序的屬性:每一次回圈都能使一個數據到確定的位置上
# 求一個列表中的最大值
nums = [3, 1, 9, 8, 4, 2, 0, 7, 5]
# ---------------------------------
# nums.sort()
# print(nums)
# print(nums[-1])
# ---------------------------------
# nums.sort(reverse=True)
# print(nums[0])
# print(nums)
# --------------------------------
x = nums[0] # 假設第0個是最大數
# for num in nums: # 如果發現列表裏存在比假設還要大的數位
# if num > x:
# # 說明假設不成立,把假設的值設定爲發現的數位
# x = num
# print('發現的最大的數爲',x,'下標爲:',nums.index(x))
index = 0
i = 0
while i < len(nums):
if nums[i] > x:
x = nums[i]
index = i
i += 1
print('發現的最大的數爲', x, '下標爲:', index) # 發現的最大的數爲 9 下標爲: 2
# 刪除空字串
words = ['hello', 'good', 'are you ok', '','' , 'ao li gei', '']
# 在使用for in回圈遍歷列表時,最好不要對元素進行增刪操作
# for word in words:
# if word == '':
# words.remove(word)
# print(words) # 會存在有的列表被漏刪的問題
# -------------------------
# i = 0
# while i < len(words):
# if words[i] == '':
# words.remove(words[i])
# i -= 1
# i += 1
# print(words) # ['hello', 'good', 'are you ok', 'ao li gei']
#---------------------------------
words2 = []
for word in words:
if word != '':
words2.append(word)
words = words2
print(words) # ['hello', 'good', 'are you ok', 'ao li gei']
程式設計非一日之功,要多學習,多練習,聚沙成塔
import random
# 列表的巢狀
# nums = [1,2,[12,23],56,7,[5]]
# 有一個學校,有3個辦公室,現在有8位元老師等待工位分配,請編寫程式,完成隨機的分配
teachers = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
rooms = [[], [], []]
for teacher in teachers:
room = random.choice(rooms) # choice 從列表裏隨機選擇一個數據
room.append(teacher)
print(rooms)
for i, room in enumerate(rooms):
print('房間%d裡一共有%d個老師,分別是:' % (i, len(room)), end='')
for teacher in room:
print(teacher, end='\t')
print()
# [['f'], ['a', 'c', 'e', 'g', 'h'], ['b', 'd']]
# 房間0裡一共有1個老師,分別是f
# 房間1裡一共有5個老師,分別是a c e g h
# 房間2裡一共有2個老師,分別是b d