15

我被要求接受一个整数列表 (x),将列表中的第一个值和最后一个值相加,然后返回一个整数和总和。我已经使用以下代码来做到这一点,但我遇到的问题是,当我尝试评估总和时,它实际上是一个单项列表而不是整数。我试图将它转换为 int 但我似乎无法让它工作。

def addFirstAndLast(x):  
    lengthOfList = len(x)  
    firstDigit = x[0:1]  
    lastDigit = x[lengthOfList:lengthOfList-1]  
    sum = firstDigit + lastDigit  
    return sum  
4

4 回答 4

21

使用索引

您正在对列表进行切片,返回列表。在这里,您应该改用索引:

firstDigit = x[0]
lastDigit = x[-1]

为什么切片对你来说是错误的:

当您这样做时x[0:1],您会将项目列表从列表的开头带到第一个间隔。

 item0, item1, item2, item3
^ interval 0
        ^ interval 1
              ^ interval 2 
                     ^ interval 3    

x[0:2]例如,这样做会返回项目 0 和 1。

于 2013-04-08T20:03:13.010 回答
5

这一切都归结为:

def addFirstAndLast(x): 
    return x[0] + x[-1]

在 Python 中,负列表索引的意思是:从列表的右侧开始向左方向索引,其中从右到左的第一个位置是-1,第二个位置是-2,最后一个位置是-len(lst)

于 2013-04-08T20:03:35.653 回答
5

使用切片表示法

def addFirstAndLast(x):  
    return x[0] + x[-1]

x[0] = 将为您提供列表的第 0索引,第一个值

x[-1] = 将为您提供列表的最后一个元素。

于 2013-04-08T20:04:06.880 回答
2

我只是在这里为任何像我一样在列表推导中苦苦挣扎的人添加一个特殊情况,它返回一个列表。@Thomas Orozco 的回答救了我。这是一个非常简单的例子:

mylist=[1,5,6]
[el for el in mylist if el==5]
>> [5] #returns a *list* containing the element -- not what I wanted

添加下标会从列表中提取元素。

[el for el in mylist if el==5][0]
>> 5 #returns the element itself

如果您希望将多个元素作为元组(而不是列表)返回,您可以将整个语句括起来:
tuple([el for el in l if (el==5 or el==6)])

于 2019-11-05T23:06:04.643 回答