2015-10-15 94 views
1

我似乎无法乘以我的数组中的整数。为什么我无法将列表中的元素相乘?

grid = [8, 2, 22, 97, 38, 35, 29, 76, 51, 87] 

digits = 1 
startPos = 0 
total = [] 

for i in range(0,7): 
    for i in range(startPos, startPos+3): 
     value = int(grid[i:i+1]) 
     digits = digits * value 
    total.append(digits) 
    startPos = startPos + 1 
    digits = 1 

我不断收到错误

int() argument must be a string, a bytes-like object or a number, not 'list' 

据我知道在我的数组中的值是整数。我做错了什么?为了澄清,我正在寻找阵列中任何3个相邻数字所能产生的最大值。

+0

的列表,您能不能给一个数组作为参数传递给'int'。尝试把'int(grid [i])'而不是'int(grid [i:i + 1])' –

+0

'grid [i:i + 1]'得到一个切片而不是一个元素。 '[1,2,3,4] [1:2] - > [2]' –

回答

2

grid[i:i+1]会给你一个列表,你不能传递一个列表int功能,而不是你可以简单地使用i作为指标来获取元素:

int(grid[i]) 

如果您wan't到int功能应用于元素的列表,你可以使用map

map(int,my_list) 
+0

他们已经ints;) –

+0

@PadraicCunningham他,我明白了! :)我认为OP意味着他们是数字字符串(我希望它会是这样;)) – Kasramvd

+1

我认为他们只是在索引和切片之间感到困惑。一旦代码更改为'int(grid [i])'它应该可以工作。 –

0

你应该使用: value = grid[i:i+1][0] 代替value = int(grid[i:i+1]) becouse grid[i:i+1]是LEN 1

for i in range(0,7): 
    for i in range(startPos, startPos+3): 
     print(i,i+1,grid[i:i+1], grid[i:i+1][0]) 

0 1 [8] 8 
1 2 [2] 2 
2 3 [22] 22 
1 2 [2] 2 
... 
相关问题