【问题标题】:List indices must be not list列表索引必须不是列表
【发布时间】:2022-01-19 18:11:07
【问题描述】:

pole[i][j] == 1时我需要采取行动,但它会抛出错误:

TypeError:列表索引必须是整数或切片,而不是列表

pole = [[0,1,0],
        [1,0,1],
        [0,1,1]]
for i in pole:
    for j in pole:
        if pole[i][j] == 1:
            my_code()

【问题讨论】:

  • 您已经在遍历列表,只需执行if j == 1:
  • 正如@Pedro Maia 已经写的那样,您正在迭代列表。将您的第二个循环更改为for j in i:,然后您可以使用if j == 1:进行检查
  • 在您的“操作”中,您是否需要索引ij,或者只是当索引j 为1 时需要执行操作?请注意,这里没有索引,例如i 目前是pole 的子列表

标签: python list for-loop typeerror


【解决方案1】:

您使用for i in pole 获取pole 的实际值而不是索引。这是更正后的代码:

pole = [[0,1,0],
        [1,0,1],
        [0,1,1]]
for i in range(len(pole)):
    for j in range(len(pole[i])):
        if pole[i][j] == 1:
            my_code()

或者,您可以使用值而不是索引:

pole = [[0,1,0],
        [1,0,1],
        [0,1,1]]
for i in pole:
    for j in i:
        if j == 1:
            my_code()

【讨论】:

  • 哇!如果我只等几分钟再输入我的,我会看到这个几乎相同的版本!格林尼治标准时间!
  • 删除我的这个版本,以免我得到答案......我会给你一个 +1。
【解决方案2】:

for-in 循环遍历列表的元素,而不是其索引。另外,请注意,您的内部循环执行与外部循环相同的迭代,而不是迭代子列表:

for x in pole:
    for y in x:
        if y == 1:
            my_code()

【讨论】:

    【解决方案3】:

    嗯,从技术上讲,鉴于my_code() 不使用ij,您可以这样做:

    for _ in range(sum(map(sum, pole))):
        my_code()
    

    pole 中的元素不一定是 0 和 1 - 你可以触发其他条件,例如:

    sum(map(lambda x: sum(y > 0 for y in x), pole)
    

    【讨论】:

    • 这就是我问这个的原因。如果my_code() 独立于“i”和“j”,并且一个人真的只想执行它1 出现在矩阵中的次数,那么这个或类似的就是答案。
    猜你喜欢
    • 2015-09-02
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多