我想要做的是选择列表A中的一项,然后选择列表B中的另一项,将它们配对:
A[0]+B[n], A[1]+B[n-1],.....,A[n]+B[1]
我使用了两个for
循环,但是没有用:
class Solution(object):
def plusOne(self, digits):
sum=0
for j in range(len(digits)-1,0,-1) :
for i in range(0,len(digits),1):
sum=sum+digits[i]*pow(10,j)
return sum+1
我输入了[1,2,3]
,我想得到的是124
,
但我得到了661
。
编辑:
对不起,我上面给出的示例不清楚。
让我们考虑一下A[1,2,3]
和B[6,5,4]
。
我想要输出[5,7,9]
,因为5
是1+4
,7
是2+5
,9
是3+6
>
答案 0 :(得分:3)
您要执行的操作是将数字列表转换为相应的数字(并添加1
)。您可以enumerate
反转列表,以便将一个数字与其10
的适当功效配对:
digits = [1, 2, 3]
sum(10**i * y for i, y in enumerate(digits[::-1])) + 1
# 124
您可以使用zip
将其应用于其他示例,如下所示:
A = [1,2,3]
B = [6,5,4]
sum(10**i * (x+y) for i, (x, y) in enumerate(zip(B, A[::-1])))
# 579
答案 1 :(得分:3)
您可以无循环执行此操作:
A = [1,2,3]
B = [6,5,4]
C = list(map(sum,zip(A,B[::-1]) ))
print(C)
zip()
-创建所有可迭代元素的成对,然后将其A
和B
倒转(通过切片)。然后,您将每一对加起来并从这些总和中创建一个列表。
map( function, iterable)
-将函数应用于可迭代的每个元素
zip()
在两个列表的长度相同时起作用,否则您将需要使用0
默认值为itertools.zip_longest()。
K = [1,2,3,4,5,6]
P = list(map(sum, zip_longest(K,C,fillvalue=0)))
print(P)
输出:
[5, 7, 9] # zip of 2 same length lists A and B reversed
[6, 9, 12, 4, 5, 6] # ziplongest for no matter what length lists
答案 2 :(得分:2)
如果要在同一列表中来回搜索或以相同长度(i和len(lst)-1-i)搜索不同列表,则只需要一个循环。
请尽量不要将sum
,list
,tuple
,str
,int
等内置变量用作变量名,它会给在某些情况下会给您带来一些讨厌的结果。
class Solution(object):
def plusOne(self, digits):
sum_val = 0
for i in range(len(digits)):
sum_val += digits[i]*pow(10, len(digits)-1-i)
return sum_val+1
sol = Solution()
dig = [1, 2, 3]
print(sol.plusOne(dig))
输出:
124
A = [1, 2, 3]
和B = [6, 5, 4]
。
您可以使用列表理解:
res = [A[i]+B[len(A)-i-1] for i in range(len(A))]
或使用zip()
函数和列表理解:
res = [a+b for (a, b) in zip(A, reversed(B))]
结果:
[5, 7, 9]