访问列表中的值,并在Python3中判断该值是否存在 - 索引错误转换为标量值

2024-09-30 20:37:17 发布

您现在位置:Python中文网/ 问答频道 /正文

class BarcodeAnalyser():
def __init__(self):
    self.rangeTrueBarcarodesfirst =[]
    self.rangeTrueBarcodesecond = []
    self.rangeTrueBarcodethird = []
    self.isBrange1 = []
    self.isBrange2 = []
    self.isBrange3 = []

def isthere5or8(self):
    for values in self.rangeTrueBarcarodesfirst:
        if (values[2:] == '5' or values[2:] == '8') and (values[7:] == '5' or values[7:] == '8'):
            self.isBrange1.append(values)
            print("this is identified bcode in this range(2456500 - 2556499): " + str(self.isBrange1))
            if values is None:
                break
    for values2 in self.rangeTrueBarcodesecond:
        if (values2[2:] == '5' or values2[2:] == '8') and (values2[7:] == '5' or values2[7:] == '8'):
            self.isBrange2.append(values2)
            print("this is identified bcode in this range(8500000 - 9499999): " + str(self.isBsrange2))
            if values2 is None:
                break
    for values3 in self.rangeTrueBarcodethird:
        if(values3[2:] == '5' or values3[2:] == '8') and (values3[7:] == '5' or values3[7:] == '8'):
            self.isBrange3.append(values3)
            print("this is identified bcode in this range (9790681 - 9815680): " + str(self.isBrange3))
            if values3 is None:
                break

以上代码的输出为:

if (values[2:] == '5' or values[2:] == '8') and (values[7:] == '5' or values[7:] == '8'):
IndexError: invalid index to scalar variable.

列表rangeTrueBarcodefirstrangeTrueBarcodesecondrangeTrueBarcodethird的内容的格式如下:[9369181, 8668489]

我只是尝试切片,如果值索引2和8等于5或8,则将它们附加到相应的列表中

我做得对吗


Tags: orandinselfforifisthis
1条回答
网友
1楼 · 发布于 2024-09-30 20:37:17

原件:

关键的一点是,您正在尝试切片不支持切片的内容。例如,987[1]抛出错误,而不是返回8,因为整数不支持切片

似乎rangeTrueBarcodesfirst是一个包含数字的列表。你的文章举例:

rangeTrueBarcodesfirst = [9369181, 8668489]

但是,请看循环的简化版本:

for values in rangeTrueBarcodesfirst:
    if values[2:] == '5':
        print(True)

所以第一次通过,values == 9369181,这是一个整数。不能对整数进行切片,因此在尝试values[2:]时会发生错误。您可能希望在某个时候将values强制转换为字符串,如下所示:

for values in rangeTrueBarcodesfirst:
    string_values = str(values)
    if string_values[2:] == '5':
        print True

另外三个想法:

  1. values是这个变量的奇数名称,因为它只是一个值(无论是字符串还是整数)。为什么不称之为更具描述性的东西,比如barcode
  2. 根据程序的其他部分,您可能希望在整个过程中将barcode存储为字符串。你曾经相信它们是整数吗
  3. 在google中查找错误会使某些数据看起来像是在pandasnumpy数据类型中,因此如果这不能解决您的问题,我建议发布导致rangeTrueBarcodesfirst构造的代码

你知道吗

编辑:

我一开始就意识到你的例子里还有更多的东西。基本思想(仔细想想values变量中的内容)是相同的,但这里还有一些注释(假设values应该是字符串)

首先,values[2:] == '5'左边是字符串的一部分,而不是单个字符,因此只有当values的长度正好是3时才是True。例如,'abc'[2:] == 'c',但是'abcd'[2:] == 'cd'

所以要么你有一个bug,要么你期望一个长度为3的列表。在第一种情况下,你的意思可能是values[2](注意不要:)。在第二种情况下,您又遇到了麻烦,因为在同一行中,您看到的是values[7:]。如果字符串太短,则返回空字符串(''

换句话说,不管values中有什么,下面的表达式总是假的:

(values[2:] == '5') and (values[7:] != '')

相关问题 更多 >