【问题标题】:Why can't I multiply the elements in my list?为什么我不能将列表中的元素相乘?
【发布时间】:2015-10-15 19:56:47
【问题描述】:

我似乎无法将数组中的整数相乘。

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 个相邻数字中得出的最大值。

【问题讨论】:

  • 您不能将数组作为参数提供给int。尝试使用 int(grid[i]) 而不是 int(grid[i:i+1])
  • grid[i:i+1] 得到一个切片而不是一个元素。 [1,2,3,4][1:2] -> [2]

标签: python arrays list python-3.x


【解决方案1】:

grid[i:i+1] 会给你一个列表,你不能将列表传递给int 函数,你可以简单地使用i 作为索引来获取元素:

int(grid[i])

如果您不想将int 函数应用于元素列表,您可以使用map

map(int,my_list)

【讨论】:

  • @PadraicCunningham 他,我明白了! :) 我认为 OP 的意思是它们是数字字符串(我希望它会是那样的;))
  • 我认为他们只是对索引和切片感到困惑。一旦代码更改为int(grid[i]),它应该可以工作。
【解决方案2】:

您应该使用: value = grid[i:i+1][0] 而不是value = int(grid[i:i+1]) 因为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  
...

【讨论】:

    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多