Python第三周 學習筆記(2)

來源:互聯網
上載者:User

標籤:學習筆記

選擇排序:
  • 時間複雜度O(n**2)
  • 沒有辦法知道當前輪是否已經達到排序要求,但是可以知道極值是否在目標索引位置上
  • 遍曆次數1,...,n-1之和n(n-1)/2
  • 對比冒泡法:減少了交換次數,提高了效率,效能略好
  • 方法三、四實際上降低的是平均時間複雜度
方法一:
nums = [1, 2, 6, 7, 8, 9, 3, 4, 5]for i in range(len(nums)):    maxindex = i    for j in range(i + 1, len(nums)):        if nums[j] < nums[maxindex]:            maxindex = j    if i != maxindex:        nums[i], nums[maxindex] = nums[maxindex], nums[i]print(nums)       
方法二(基於方法一的最佳化):
  • 最佳化點:內迴圈一次遍曆同時取出最大、最小值 放在兩端
    nums = [7, 19, 15, 12, 15, 5, 13, 14, 8, 15]  length = len(nums)for i in range(length // 2):maxindex = iminindex = length - i - 1minorigin = length - i - 1for j in range(i + 1, length - i):    if nums[j] > nums[maxindex]:        maxindex = j    if nums[j-1] < nums[minindex]:#正序比較 或者逆序比較都可以 length - j - 1        minindex = j - 1if i != maxindex:    nums[i], nums[maxindex] = nums[maxindex], nums[i]if i == minindex: #如果i就是最小值索引,則執行此if,因為上一行索引i的值與最大值已經進行了交換    minindex = maxindexif minorigin != minindex:    nums[minorigin], nums[minindex]=nums[minindex], nums[minorigin]print(nums) 
方法三(基於方法二的最佳化):
  • 最佳化點:如果一次迭代最大值與最小值相等則剩餘元素值相同,即已排序完畢
    nums = [7, 19, 15, 12, 15, 5, 13, 14, 8, 15] length = len(nums)for i in range(length // 2):maxindex = iminindex = length - i - 1minorigin = length - i - 1for j in range(i + 1, length - 1):    if nums[j] > nums[maxindex]:        maxindex = j    if nums[length - j - 1] < nums[minindex]:        minindex = length - j - 1if minindex == maxindex: #!    breakif i != maxindex:    nums[i], nums[maxindex] = nums[maxindex], nums[i]if i == minindex:    minindex = maxindexif minorigin != minindex:    nums[minorigin], nums[minindex] = nums[minindex], nums[minorigin]print(nums)
方法四(基於方法三的最佳化):
  • 如果列表為下面這種情況,最小值無需交換
    nums =[1, 1, 1, 1, 1, 1, 1, 1, 2]length = len(nums)for i in range(length // 2):maxindex = iminindex = length - i - 1minorigin = length - i - 1for j in range(i + 1, length - 1):    if nums[j] > nums[maxindex]:        maxindex = j    if nums[length - j - 1] < nums[minindex]:        minindex = length - j - 1if minindex == maxindex: #!    breakif i != maxindex:    nums[i], nums[maxindex] = nums[maxindex], nums[i]if i == minindex:    minindex = maxindexif minorigin != minindex and nums[minorigin] != nums[minindex]: #!    nums[minorigin], nums[minindex] = nums[minindex], nums[minorigin]print(nums)
習題解析1.使用者輸入一個數字
  • 列印每一位元字及其重複的次數方法一:
    num = input(‘>>>‘)d = {}for c in num:if not d.get(c):    d[c] = 1    continued[c] += 1print(d)
方法二:
d ={}for c in num:    if c not in d.keys():        d[c] = 1    else:        d[c] += 1print(d)
2.數字重複統計
  • 隨機產生100個整數
  • 數位範圍[-1000, 1000]
  • 升序輸出所有不同的數字及其重複的次數
    import randomn = 100nums = [0] * nfor i in range(n):nums[i] = random.randint(-1000, 1000)print(nums)    t = nums.copy()t.sort()print(t)d = {}for x in nums:if x not in d.keys():    d[x] = 1else:    d[x] += 1print(d)d1 = sorted(d.items())print(d1)
3.字串重複統計
  • 字元表‘abcdefghijklmnopqrstuvwxyz‘
  • 隨機挑選2個字母組成字串,共挑選100個
  • 降序輸出所有不同的字串及重複的次數
    import randomalphabet = ‘abcdefghijklmnopqrstuvwxyz‘words = []for _  in range(100):words.append(‘‘.join(random.choice(alphabet) for _ in range(2)))d = {}for x in words:d[x] = d.get(x, 0) + 1print(d)d1 = sorted(d.items(), reverse = True)print(d1)
4.返回1-10平方的列表
[i ** 2 for i in range(1,11)]
5.有一個列表lst = [1,4,9,16,2,5,10,15],產生一個新列表,要求新列表元素是lst相鄰2項的和
lst = [1,4,9,16,2,5,10,15][lst[i] + lst[i + 1] for i in range(len(lst) - 1)]
6.列印九九乘法表
[print(‘{}*{}={:<{}}{}‘.format(j, i, j * i,2 if j ==1 else 3, ‘‘ if i != j else ‘\n‘),end = ‘‘)for i in range(1,10) for j in range(1,i + 1)]
7."0001.abadicddws" 是ID格式,要求ID格式是以點號分割,左邊是4位從1開始的整數,右邊是10位隨機小寫英文字母。請依次產生前100個ID的列表
import random[(‘{:>04}‘.format(i) + ‘.‘ + ‘‘.join(‘abcdefghijklmnopqrstuvwxyz‘[random.randint(0,25)] for _ in range(10))) for i in range(1,101)]

Python第三周 學習筆記(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.