python006 列表練習題

麻辣魚絲發表於2020-11-19
# 練習1

# 有一個列表names,儲存了一組姓名 names=['names1','names2','names3','names4']
# 再讓使用者輸入一個姓名,如果這個姓名在列表中存在,提示使用者姓名已存在
# 如果這個姓名在列表中不存在,就將這個姓名新增到列表裡
names = ['names1','names2','names3','names4']
username = input('請輸入名字:')
# 使用 if 語句
if username in names:
    print("使用者名稱已存在。")
else:
    names.append(username)

# 使用遍歷
for name in names:
    if username == name:
        print('使用者名稱已存在。')
        break
else:
    names.append(username)
print(names)

print()



# 練習2

# 冒泡
# 氣泡排序思想:
# 讓一個數字和它相鄰的下一個數字進行比較運算
#   如果前一個數字大於後一個數字,則交換兩個數的位置
#     此時,最大的數就在最後了
nums = [6, 5, 3, 1, 8, 7, 2, 4]
count = 0
i = 0
# 第一趟比較時,多比較了0次,i = 0
# 第二趟比較時,多比較了1次,i = 1
# 第三趟比較時,多比較了2次,i = 2
# 趟數由 i 控制,次數由 n 控制
while i < len(nums) - 1:
    # 在每一趟裡面都定義一個flag
    flag = True # 假設每一趟都沒有換行
    n = 0
    # 以下迴圈就是將大的數往後移
    while n < len(nums) - 1 - i:
        count += 1
        # print(nums[n], nums[n+1])
        if nums[n] > nums[n+1]:
            # 只要交換了,假設就不成立
            flag = False
            nums[n], nums[n + 1] = nums[n+1], nums[n]
        n += 1
    if flag:
        # 這一趟走完以後,flag依然是True,說明這一趟沒有進行資料交換
        break
    i += 1
print(nums) # [5, 3, 1, 6, 7, 2, 4, 8]
# 外層迴圈出來的結果,按從小到大的排序
print('比較了%d次'% count)

print()



# 練習3

# 求列表裡的最大數
nums = [3, 1, 9, 8, 4, 2, 0, 7, 5]
# 方法1
# 先升序,後提取最後一個
nums.sort()
print(nums[-1])

# 方法2
# 先降序,後提取第一個
nums.sort(reverse=True)
print(nums[0])

# 方法3
# 不排序,直接找
# 思想:假設一個數是0,將假設的數和列表的進行對比,一旦列表的數大於假設的數就提取
#   但是,此時可能出現你假設的數比要比較的數都大
#     所以一般都是直接用列表裡面的數進行比較

x = nums[0] # 假設最大的數是第1個(索引0)
for num in nums:
    if num > x:
        # 如果發現列表裡面存在比假設還要大的數字,說明假設不存在
        # 此時應該把假設的值替換為被發現的值
        x = num
# 使用自帶的 index 方法來獲取下標
print('發現的最大數是:%d,它的下標是%d' % (x, nums.index(x)))

x = nums[0]
index = 0
i = 0
while i < len(nums):
    if nums[i] > x:
        x = nums[i]
        index = i
    i += 1
# print('發現的最大數是:%d,它的下標是%d' % (x, index))



print()

# 練習4

# 刪除列表裡的空字串
xs = ['h1','h2','','','h4','h5','']

# 方法1
# 在使用 for……in 迴圈遍歷列表時,最好不要對元素進行增刪操作
for x in xs:
    if x == '':
        xs.remove(x)
print(xs)
# ['h1', 'h2', 'h4', 'h5', '']
# 在刪掉之後,就不再看刪掉的位置的值了(下標問題)
#   但是值被刪掉後,後面的值會向前擠,此時就會漏掉刪掉位置的新值

# 方法2
i = 0
while i < len(xs):
    if xs[i] == '':
        xs.remove(xs[i])
        i -= 1 # 為了返回原先的位置,再對比一遍
    i += 1 # 向前檢查
print(xs)
# ['h1', 'h2', 'h4', 'h5']

# 方法3
xs2 = [] # 建立一個空列表
for x in xs:
    if x != '':
        xs2.append(x) # 把不是空字串的值新增進空列表裡面
xs = xs2 # 用新列表把原先的列表替換掉
print(xs)

 

相關文章