2017-06-05 61 views
0

我必須找出哪個更大,給定列表中的第一個或最後一個元素,並將所有其他元素設置爲該值。使用for循環將元素分配到列表?

我用for循環編寫了一個代碼,但是我得到一個錯誤,列表索引超出範圍。我的錯誤是什麼?

的代碼如下:

def max_end3(nums): 
    for i in nums: 
     if (nums[0] > nums[len(nums)-1]): 
      nums[i] = nums[0] 
     else: 
      nums[i] = nums[len(nums)-1] 
     return (nums) 
+1

'對於我在nums' /'nums [i]'不是*索引*列表'nums'的正確方法。 –

+2

'我'不是一個索引,它是數字(列表元素)本身。 – cdarke

+0

不是你的問題的答案,但這是實現你的目標的一種方式:'nums [:] = [max(nums [0],nums [-1])] len(nums)'。 –

回答

1

你不必for循環做的,因爲'nums已經是一個列表。我相信編碼蝙蝠是給數組的長度是3。因此,嘗試這種

def max_end3(nums): 
    if nums[0] > nums[-1]: 
    return nums[:1] *3 
    elif nums[-1] > nums[0]: 
    return nums[-1:] * 3 
    elif nums[0] == nums[-1]: 
    return nums[:1] * 3 
    else: 
    return nums 
2

這裏有一個選項:

the_list = [6, 7, 2, 4, 5, 7] 

val = max([the_list[0], the_list[-1]) 

the_list = [val]*len(the_list) 
1

for i in nums/nums[i]不是指數列表nums的正確方法。我認爲你可以代替試試這個:

def max_end3(nums): 
    for i,num in enumerate(nums): 
     if (nums[0] > nums[-1]): 
      nums[i] = nums[0] 
     else: 
      nums[i] = nums[-1] 
    return (nums) 

使用內置enumerate函數返回「包含(從開始默認爲0)和值從遍歷序列獲得的計數的元組。」這允許您同時索引&迭代值。

使用nums[-1]代表最後項列表,因爲Python支持負的索引:)

注:其他解決方案更優雅,這是我將如何解決這個問題,但對於初學者來說,如果使用簡單結構(如for循環),有時候會更容易理解。

2

你已經混淆了索引和列表元素。考慮輸入列表[17,3,-42,-3]。您的for聲明步驟i通過值17,3,42和-3按此順序。然而,分配你認爲i正在對位置或索引值,0,1,2,3

試試這個,而是:

def max_end3(nums): 
    for i in range(len(nums)): 
     if (nums[0] > nums[len(nums)-1]): 
      nums[i] = nums[0] 
0

要替換的每個元素定列表我會預先計算所需的值,然後將其分配給每一個元素,即:

def max_end3(nums): 
    larger = max((nums[0], nums[-1])) 
    for i in range(len(nums)): 
     nums[i] = larger 

你可以或者離開原來的名單不變,並生成有用值的一個新的列表。如果新列表被分配到與舊名稱相同的名稱,它將具有類似的效果,例如。

nums = [max((nums[0], nums[-1]))] * len(nums)