day06列表作業

weixin_41615044發表於2020-12-15

1.生成50-300之間可重複的 10個資料 存放於列表中, 保證列表中元素的順序,對列表進行排重,並對列表使用排序演算法進行降序排序

例如:隨機生成了[70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
		--- 去重之後 [70, 88, 91, 107, 234, 177, 282, 197]
  	---- 降序排序 [282, 234, 197, 177, 107, 91, 88, 70]
from random import randint
nums = list(set([randint(50, 300) for i in range(10)]))
nums.sort(reverse=True)
print(nums)

2.利用列表推導式, 完成以下需求

a. 生成一個存放1-100中各位數為3的資料列表

結果為 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
nums = [num for num in range(3, 100, 10)]
print(nums)

b. 利用列表推到是將 列表中的整數提取出來

例如:[True, 17, "hello", "bye", 98, 34, 21] --- [17, 98, 34, 21]
lst = [True, 17, "hello", "bye", 98, 34, 21]
nums_int = [num for num in lst if type(num)==type(1)]
print(nums_int)

c.利用列表推導式 存放指定列表中字串的長度

例如 ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
lst = ["good", "nice", "see you", "bye"]
lenthes = [len(word) for word in lst]
print(lenthes)

3.已知程式碼如下,請回答出各個print的結果 並說明原因


nums = [17, 39, 28, 51]
nums2 = nums
nums2.pop()
print(len(nums)) # 這個結果是什麼   請描述原因

numlist = [17, 22, 39, 58, [55, 43]]
nums3 = numlist.copy()
print(numlist is nums3) # 結果  原因是什麼
numlist[-1][0] = 99
print(nums3) # num3會不會發生變化

結果:3
nums有4個元素
把nums變數名直接賦值給nums2,是把nums的地址賦值給了nums2,兩個變數有同一個值
當nums2使用pop()方法拿出該地址中的列表的最後一個元素51後,該地址還剩3個元素
所以nums的長度,也和nums2一樣只剩3
結果:False
結果:我本以為num3不會變化,但其實會變,因為是淺拷貝
numlist的值使用copy()方法賦值給nums3,但是他們的值是列表,是可變的,所以地址不同,當使用is的時候,是判斷他們的地址,所以結果是False;
地址不同,對其中一個變數進行修改不會改變另一個的值。但是copy()是淺複製,兩個變數有不同的地址,但是在更深的地方,還是同一個地址,比如列表中的元素列表中的元素同樣被修改;

4.自己用程式碼實現列表相關方法的功能:count、index、extend、clear

# count
def my_count(item, lst):
    return sum([True for i in lst if i==item])

# index
def my_index(item, lst):
    return [i for i, x in enumerate(lst) if x==item][0]

# extend
def my_extend(iteration, lst):
    lst += [i for i in iteration]
    return lst

# clear
def my_clear(lst):
    [lst.remove(i) for i in lst[:]]