亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過python函數制作“折疊列表”

通過python函數制作“折疊列表”

GCT1015 2023-10-18 16:16:12
這是我第三次嘗試解決這個問題,作為一個全新的 python 用戶,我真的不明白我的教授想說什么。我需要在 python 中創建一個函數,它接受一個列表并將其“對半”,以便第一個和最后一個術語加在一起,第二個術語和倒數第二個術語等。如果我有一個空白列表,則輸出應該為空,如果我有一個奇數列表,則不應將中間項添加到任何內容中。(教授的原始提示:提示:創建一個函數,將列表作為輸入,并生成一個“對折”列表,我的意思是輸出中的第一項是輸入的第一項和最后一項的總和;輸出中的第二項是第二項和倒數第二項的總和,依此類推。因此,輸入 [10,2,3,1] 將產生 [11,5],而輸入 [10,2] ,3] 將產生 [13,2]。如果輸入是空列表,則應返回空列表;如果輸入是 [5],則輸出應為 [5]。)從其他人的幫助指導,這就是我到目前為止所擁有的a = [10, 14, 21, 25, 52, 55]def folded_list(input_list):    a = input_list    folded_list_output = [ a[i] + a[-(i + 1) ] for i in range( len(a) // 2)]    return folded_list_outputprint(folded_list(a))我認為這就是我的教授想要的。然而,他說: 你有一個代碼片段,也許可以做你想做的事情(使用一個奇特的“列表理解”,這就是所謂的方括號結構,而不是 for 循環),你只需要把它放在一個函數定義并測試它是否有效。列表理解的使用并不是它不是函數的原因,而是因為 def function_name(arguments): 看不到任何線條。測試“極端情況”總是一個好主意:例如,當您提供空列表作為輸入時,它是否會執行您想要的操作?對于具有奇數個元素的列表會發生什么?(提示:它沒有做它應該做的事情,因為中間的元素完全被刪除了。)我真的不明白他想說什么——我以為我的def folded_list(input_list):   a = input_list   folded_list_output = [ a[i] + a[-(i + 1) ] for i in range( len(a) // 2)]   return folded_list_output正是他在論證部分尋找的內容。有誰明白他的意思以及我應該在代碼中嘗試修復什么?
查看完整描述

3 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

只是為了好玩,我想嘗試使用zip、列表理解和切片表示法。就我個人而言,這更符合邏輯——但也許這只是我不平衡的大腦。


它看起來像這樣一團糟:


def folded(lst) -> list:

    """Fold a list by summing opposite ends."""

    r = [a+b for a, b in zip(lst, lst[::-1])][:(len(lst)//2)+1]

    if len(lst) % 2 != 0:

        r = r[:-1] + [r[-1:][0]//2]

    else:

        r = r[:-1]

    return r

輸出:


l = [2]

>>> [2]


l = [2, 5]

>>> [7]


l = [2, 5, 8]

>>> [10, 5]


l = [2, 5, 8, 10]

>>> [12, 13]


l = [2, 5, 8, 10, 12]

>>> [14, 15, 8]


查看完整回答
反對 回復 2023-10-18
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

您有一個代碼片段,也許可以實現您想要的功能

您可能只向您的教授發送了列表理解。他們希望你發送一個函數。

(使用奇特的“列表理解”,這就是所謂的方括號結構,而不是 for 循環),

非常不言自明

您只需將它放在函數定義中并測試它是否有效。列表理解的使用并不是它不是函數的原因,而是因為 def function_name(arguments): 看不到任何線條。

def function_name(argument1, argument2, ...):是什么使該塊內的代碼成為一個函數。如果您提交此信息:

def folded_list(input_list):
   a = input_list
   folded_list_output = [ a[i] + a[-(i + 1) ] for i in range( len(a) // 2)]  
    return folded_list_output

thenfolded_list是采用單個參數的函數input_list。

由于您有一些 FORTRAN 背景,FORTRAN 中的子例程或函數將被歸類為 Python 中的函數。還記得在 FORTRAN 中如何function myfunc(arg1, arg2, arg3) result(answer)定義函數嗎?你需要def myfunc(arg1, arg2, arg3)用Python說。在 FORTRAN 中,函數必須返回某些內容,但子例程不能。在 Python 中,函數可能返回某些內容,也可能不返回某些內容。這幾乎是新手級別的唯一區別。

測試“極端情況”總是一個好主意

極端情況是您期望會破壞代碼的情況(但理想情況下不會)。測試極端情況可以確保您的代碼穩健,并且在收到時髦但有效的輸入時不會中斷。

例如,當您提供空列表作為輸入時,它會執行您想要的操作嗎?

可以?

folded_list([])
# Output: []

當然看起來像它

對于具有奇數個元素的列表會發生什么?(提示:它沒有做它應該做的事情,因為中間的元素完全被刪除了。)

folded_list([1, 2, 3, 4, 5])
# Output: [6, 6]

嘿!這看起來不對勁!3列表中間的發生了什么?


現在,由于本練習的全部目的是讓您學習,因此我不會向您提供所需的代碼。不過,您可以使用以下算法:

  • 對于包含奇數個元素的列表,假設為 5,len(list) = 5

  • 所以len(list) // 2 = 2

  • 索引0和1需要添加到3和4上

  • 索引 2 需要單獨保留(嘿,看,2 = len(list) // 2

  • 迭代列表的前半部分

    • 如果當前索引小于len(list)//2,則追加list[index] + list[-index]到新列表(負索引只是告訴 Python 向后計數而不是向前計數該元素,因此list[-2]將為您提供倒數第二個元素)

    • 如果索引等于len(list)//2,則追加list[index]

len(list)當偶數時這有效嗎?如果它不適用于偶數大小的列表,您能想出一種適用于偶數奇數大小的列表的算法嗎?if或者是有條件檢查列表大小,然后針對偶數大小運行一種算法,針對奇數大小運行另一種算法的唯一選擇?這對你來說是一個練習!

另請注意:當我還是初學者時,我發現首先寫出整個循環,然后如果可能的話將其壓縮為列表理解更為直觀。這個列表的理解:

folded_list_output = [ a[i] + a[-(i + 1) ] for i in range( len(a) // 2)]

如果這樣寫,就更容易理解(或者至少對我來說是很多年前):

folded_list_output = []

for i in range(len(a) // 2):

    elem1 = a[i]

    elem2 = a[-(i + 1)] 


    folded_list_output.append(elem1 + elem2)


查看完整回答
反對 回復 2023-10-18
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

您可以從 start(假設i)開始迭代到中間并添加i兩側的 th 元素,然后返回新列表:


a = [10, 14, 21, 25, 52, 55]

b = [10, 14, 21, 25, 52, 55, 1]



def folded_list(input_list):

    new_list = []

    l = len(input_list)

    for i in range(l//2):

        new_list.append(input_list[i] + input_list[-i-1])


    if l % 2 != 0:

        return new_list + [input_list[l//2]]

    return new_list



print(folded_list(a))  # [65, 66, 46]

print(folded_list(b))  # [11, 69, 73, 25]


查看完整回答
反對 回復 2023-10-18
  • 3 回答
  • 0 關注
  • 242 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號