第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用嵌套的 for 循環(huán)重寫這個(gè) while 循環(huán)?

如何使用嵌套的 for 循環(huán)重寫這個(gè) while 循環(huán)?

UYOU 2022-01-11 15:52:18
我遵循了一個(gè)帶有while循環(huán)的算法,但問題的一個(gè)參數(shù)是我使用嵌套的 for 循環(huán),我不知道該怎么做。這是while循環(huán):i = len(lst)while i > 0:    big = lst.index(max(lst[0:i]))    lst[big], lst[i-1] = lst[i-1], lst[big]    i = i - 1    return lst這是它要回答的問題:輸入: [5,1,7,3]首先,找到最大的數(shù),即7。將它與當(dāng)前位于列表末尾的數(shù)字交換,即3. 現(xiàn)在我們有:[5,1,3,7]現(xiàn)在,找到最大的數(shù),不包括7,即5。交換它和倒數(shù)第二個(gè)數(shù)字,即3. 現(xiàn)在我們有:[3,1,5,7]?,F(xiàn)在,找到第三大數(shù)(不包括前兩個(gè)數(shù)),即3。交換它和倒數(shù)第三個(gè)數(shù)字,即1.輸出: [1, 3, 5, 7]
查看完整描述

2 回答

?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊

您在算法中看到的是選擇排序。這是您提出的第二個(gè)解決方案(嵌套for循環(huán)):


def insertion_sort(arr):

    l = len(arr)

    for i in range(l-1, -1, -1):

        m = -10000 # it should be lower than min(arr)

        idx = -1

        for key, val in enumerate(arr[:i+1]):

            if m < val:

                m = val

                idx = key

        if idx != -1:

            arr[i], arr[idx] = arr[idx], arr[i]

    return arr

快速測(cè)試:


arr = list(range(10))[::-1]

print(arr)

# prints [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

result = insertion_sort(arr)

print(result)

# prints [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


查看完整回答
反對(duì) 回復(fù) 2022-01-11
?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

這看起來像一個(gè)(相當(dāng)慢的)排序算法——即冒泡排序。它從列表的末尾迭代lst。然后它在第一個(gè)n-1元素中搜索最大值,并將它們與末尾交換。但是,如果最大值已經(jīng)在末尾,它將失敗,因?yàn)樗鼘⒆詣?dòng)max(n-1)與該n值交換。您需要為此添加支票。


因此,乍一看,我不確定是否i在之前定義過,但讓我們假設(shè)它是在 list 的長(zhǎng)度上定義的lst,看起來是這樣。所以讓我們從外部循環(huán)開始 - 因?yàn)橛幸粋€(gè)看起來像是從i0倒計(jì)時(shí)的 while 循環(huán)。這與遞增的 for 循環(huán)相反,因此我們可以創(chuàng)建一個(gè)保留范圍:


rev_range = range(0,len(lst))

rev_range.reverse() 

for j in rev_range:

    # perform the sort

我們現(xiàn)在有了用于倒計(jì)時(shí) while 循環(huán)的外部循環(huán)。排序本身向前迭代,直到找到最大值。這是一個(gè)前向 for 循環(huán)。


# sorting

max_val_so_far_index=lst[j]

# lst[:j-1] gets the first j-1 elements of the list

for k in lst[:j-1]:

    if lst[k] > lst[max_val_so_far_index]:

        max_val_so_far_index = k

# now we have the index of the maximum value

# swap

temp = lst[j]

lst[j] = lst[max_val_so_far_index]

lst[max_val_so_far_index]=temp

讓我們把這兩個(gè)組件放在一起得到:


rev_range = range(0,len(lst))

rev_range.reverse() 

for j in rev_range:

    # perform the sort

    # sorting

    #print j

    max_val_so_far_index=j


    # get the first j items

    for k in range(j):

        if lst[k] > lst[max_val_so_far_index]:

            max_val_so_far_index = k

    # now we have the index of the maximum value

    # swap

    temp = lst[j]

    lst[j] = lst[max_val_so_far_index]

    lst[max_val_so_far_index]=temp

最后lst是排序的。


查看完整回答
反對(duì) 回復(fù) 2022-01-11
  • 2 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)