使用for循环将元素分配给列表?

时间:2017-06-05 16:30:37

标签: python

我必须弄清楚哪个更大,给定列表中的第一个或最后一个元素,并将所有其他元素设置为该值。

我使用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)

5 个答案:

答案 0 :(得分:2)

这是一个选项:

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

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

the_list = [val]*len(the_list)

答案 1 :(得分: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]

答案 2 :(得分:1)

您不必为循环执行,因为'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

答案 3 :(得分: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]来表示列表中的 last 项,因为Python支持负索引:)

注意:其他解决方案更优雅,而我将如何解决问题,但对于初学者来说,如果使用像for之类的简单构造,有时会更容易理解循环。

答案 4 :(得分:0)

要替换给定列表中的每个元素,我会预先计算所需的值,然后将其分配给每个元素,因此:

ResourceDictionary

您也可以保持原始列表不变,并生成所需值的新列表。如果新列表被指定为与旧列表相同的名称,则它将具有类似的效果,例如

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