我必须弄清楚哪个更大,给定列表中的第一个或最后一个元素,并将所有其他元素设置为该值。
我使用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)
答案 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